日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法】双指针算法 ( 有效回文串 II )

發布時間:2025/6/17 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法】双指针算法 ( 有效回文串 II ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法 系列博客

【算法】刷題范圍建議 和 代碼規范
【算法】復雜度理論 ( 時間復雜度 )

【字符串】最長回文子串 ( 蠻力算法 )
【字符串】最長回文子串 ( 中心線枚舉算法 )
【字符串】最長回文子串 ( 動態規劃算法 ) ★
【字符串】字符串查找 ( 蠻力算法 )
【字符串】字符串查找 ( Rabin-Karp 算法 )

【算法】雙指針算法 ( 雙指針算法分類 | 相向雙指針 | 有效回文串 )
【算法】雙指針算法 ( 有效回文串 II )


文章目錄

  • 算法 系列博客
  • 一、有效回文串 II





一、有效回文串 II



有效回文串 II : https://www.lintcode.com/problem/891/

給定非空字符串 , 最多刪除一個字符 , 判斷是否可以將該字符串變成回文串 ;


該算法是一個貪心算法 , 給定一個字符串 “abca” , 設置兩個指針 , 分別指向最左側字符 和 最右側字符 , 從兩端開始遍歷 , 逐個比較兩個指針指向的字符是否相等 ;

如果出現了左右指針指向的字符不相等 , 那么只能有兩種操作 , 要么刪除左指針指向的字符 , 要么刪除右指針指向的字符 ;

刪除左指針指向的字符 , 繼續向后遍歷 , 判定整個字符串是否是回文串 ;
刪除右指針指向的字符 , 繼續向后遍歷 , 判定整個字符串是否是回文串 ;

如果上述兩種方案 , 都不是回文串 , 那么說明刪除單個字符后字符串仍不是回文串 ;


代碼示例 :

class Solution {/*** 給一個非空字符串 s,你最多可以刪除一個字符。判斷是否可以把它變成回文串。* @param s 給定的字符串 * @return 刪除零個或一個字符后是否是回文串*/public boolean validPalindrome(String s) {if (s == null) {return false;}// 先判定該字符串是否是回文串// 數組中 0 索引存放左指針, 1 索引存放右指針 int[] pointer = new int[2];findDifference(s, 0, s.length() - 1, pointer);if (pointer[0] >= pointer[1]) {return true;}// 如果字符串不是回文串, 則考慮刪除左指針/右指針指向的字符, 再判定是否是字符串// 刪除左指針指向的字符, 并驗證是否是回文串return isPalindrome(s, pointer[0] + 1, pointer[1])// 刪除右指針指向的字符, 并驗證是否是回文串 || isPalindrome(s, pointer[0], pointer[1] - 1); }private void findDifference(String s, int left, int right, int[] result) {// 對比兩字符是否相等, 如果相等, 指針向中間移動一位while (left < right && s.charAt(left) == s.charAt(right)) {left++;right--;}// 設置返回值// 如果該字符串是回文串, 則左指針最后等于 ( 偶數個字符 ) 或者大于右指針 ( 奇數個字符 )// 如果該字符串不是回文串 , 則左右指針原封不動返回result[0] = left;result[1] = right;}private boolean isPalindrome(String s, int left, int right) {// 判定 s 字符串是否是回文串int[] pointer = new int[2];findDifference(s, left, right, pointer);return pointer[0] >= pointer[1];} }class Main {public static void main(String[] args) {System.out.println(new Solution().validPalindrome("abcnba"));} }

總結

以上是生活随笔為你收集整理的【算法】双指针算法 ( 有效回文串 II )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。