21.03.15 LeetCode680. 验证回文字符串 Ⅱ
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
1 class Solution {
2 public boolean validPalindrome(String s) {
3 //思路:先使用双指针从左右判断是否相等
4 //当遇到不等时,判断left+1~right/left~right-1是否为回文串
5 //这里即为假设将左右的其中一个字符删去,看是否能变成回文
6 int left = 0,right = s.length()-1;
7 while(left<right)
8 {
9 char c1 = s.charAt(left),c2 = s.charAt(right);
10 if(c1==c2)
11 {
12 ++left;
13 --right;
14 }
15 else
16 return process(s,left,right-1) || process(s,left+1,right);
17 }
18 return true;
19 }
20 public boolean process(String s,int left,int right)
21 {
22 for(int i = left,j = right;i<j;i++,j--)
23 {
24 char c1 = s.charAt(i),c2 = s.charAt(j);
25 if(c1!=c2)
26 return false;
27 }
28 return true;
29 }
30
31 }