劍指 Offer II 019. 最多刪除一個字元得到迴文
阿新 • • 發佈:2022-04-05
給定一個非空字串 s,請判斷如果 最多 從字串中刪除一個字元能否得到一個迴文字串。
示例 1:
輸入: s = "aba"
輸出: true
示例 2:
輸入: s = "abca"
輸出: true
解釋: 可以刪除 "c" 字元 或者 "b" 字元
示例 3:
輸入: s = "abc"
輸出: false
提示:
1 <= s.length <= 105
s 由小寫英文字母組成
解析:
雙指標,一個從前向後,一個從後向前,如果有不同,判斷刪除第一次出現的不同的字元就可以(注意這裡要判斷兩次,不同的兩個字元分別刪)
因為之後的不同必須保證 第一次出現不同的地方相同
classSolution { public: bool validPalindrome(string s) { int l = 0, r = s.length() - 1; int flag = 0; while(l < r) { if(s[l] != s[r] && flag == 0) { flag = 1; r--; } else if(s[l] != s[r]) {break; } else l++, r--; } if(flag == 0 || l >= r) return true; flag = 0; l = 0, r = s.length() - 1; while(l < r) { if(s[l] != s[r] && flag == 0) { flag = 1; l++; } else if(s[l] != s[r]) { break; } else l++, r--; } if(flag == 0 || l >= r) return true; return false; } };