*LeetCode--Valid Palindrome II
阿新 • • 發佈:2018-05-25
++ val IT character eth href most return isp
Valid Palindrome II
Given a non-empty string s
, you may delete at most one character. Judge whether you can make it a palindrome.
Example 1:
Input: "aba" Output: True
Example 2:
Input: "abca" Output: True Explanation: You could delete the character ‘c‘.
自己的做法:(很麻煩)
利用回文的特性,準備兩個指針,left = 0, right = s.length() - 1
然後依次向中間移動,同時判斷s.charAt(left) == s.charAt(right)
當遇到不等的地方,記錄是第幾次不等,flag = 0則進行下面的操作,否則是第二次的不等,直接返回false,
進行操作判斷,如果s.charAt(left + 1) 和s.charAt(right)是否相同,此時還有一種情況就是 s.charAt(left) 和s.charAt(right - 1)也相同
這樣就得分情況討論 如下面的 2位置的 c 和後面的 u,以及他們對應的 u 和 c
mlcupuuffuupuculm
class Solution { public boolean validPalindrome(String s) { if(s == null || s.length() == 0) return true; int left = 0; int right = s.length() - 1; int flag = 0; while(left < right){ if(s.charAt(left) != s.charAt(right)){ if(flag == 0){ flag = 1; if(left + 1 < right && s.charAt(left + 1) == s.charAt(right)) { if (s.charAt( left ) == s.charAt( right - 1 )) { if (s.charAt( left + 2 ) == s.charAt( right - 1 )) { left++; } else { right--; } } else{ left++; } } else{ right--; } }else { return false; } } else { left++; right--; } } return true; } }
discuss區看到比較簡單的方法:是左邊加1或者右邊減1都考慮一下,進行或運算,結果就是了。
class Solution { public boolean validPalindrome(String s) { int i = 0, j = s.length() - 1; while (i < j && s.charAt(i) == s.charAt(j)) { i++; j--; } if (i >= j) return true; if (isPalin(s, i + 1, j) || isPalin(s, i, j - 1)) return true; return false; } private boolean isPalin(String s, int i, int j) { while (i < j) { if (s.charAt(i) == s.charAt(j)) { i++; j--; } else return false; } return true; } }
*LeetCode--Valid Palindrome II