题目:
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'.
Note:
- The string will only contain lowercase characters a-z. The maximum length of the string is 50000.
解题思路:
使用两个指针对待判断的字符串进行遍历,其中,一个指针从头向尾遍历,另外一个指针从尾像头遍历,若两个指针指向的字符不相等,那么依次尝试删除一个指针指向的字符,继续遍历进行判断。具体代码如下:
package Leetcode_Github;
public class TwoPoints_ValidPalindrome_680_1101 {
public boolean ValidPalindrome(String s){
int i = -1;
int j = s.length();
while (++i < --j) {
if (s.charAt(i) != s.charAt(j)) {
//如果i位置的字符和j位置的字符不相等,那么删除i位置的字符或者删除j位置的字符继续判断。
return IsValidPalindrome(s, i + 1, j) || IsValidPalindrome(s, i, j - 1);
}
}
return true;
}
public boolean IsValidPalindrome(String s, int i, int j) {
while (i <= j) {
if (s.charAt(i++) != s.charAt(j--)) {
//如果删除一个字符以后,i位置的字符和j位置的字符不相等,返回false
return false;
}
}
return true;
}
}