題目描述:
給定一個非空字符串 s
,最多刪除一個字符。判斷是否能成爲迴文字符串。
示例 1:
輸入: "aba" 輸出: True
示例 2:
輸入: "abca"
輸出: True
解釋: 你可以刪除c字符。
注意:
- 字符串只包含從 a-z 的小寫字母。字符串的最大長度是50000。
思路:
可以刪除一個字符,判斷是否能構成迴文字符串,左右各刪除一個進行判斷,只有當兩邊都是迴文字符串的時候纔可以。
代碼:
class Solution {
public boolean validPalindrome(String s) {
int i = 0;
int j = s.length() - 1;
while (i < j) {
if (s.charAt(i) != s.charAt(j)) {
return isPalindrome(s, i, j - 1) || isPalindrome(s, i + 1, j);
}
i++;
j--;
}
return true;
}
private static boolean isPalindrome(String s, int i, int j) {
while (i < j) {
if (s.charAt(i++) != s.charAt(j--)) {
return false;
}
}
return true;
}
}