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 }

 

posted @ 2021-03-15 10:20  γGama  阅读(35)  评论(0编辑  收藏  举报