680.验证回文字符串II

验证回文字符串II

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

实例1:输入“aba” 输出true
实例2:输入“abac” 输出true


主要的算法思想

1.检测回文字符串
回文字符串的检测其实就是要设立两个指针,一个从最左边开始依次向右,另一个从最右边依次往左,直到两个指针重合时,两个指针的移动是同步的,看这两个指针指的字符是否每个都相同
2.最多删除一个
也就是在这个过程中,例如左边遍历到i,右边遍历到j时,出现了字符不相同的情况,我们可以用改变参数的方法来实现删除一个元素,改为(i+1,j)或者改为(i,j-1),两种情况都需要计算能否判断是回文字符串


class Solution{
  public boolean validPalindrome(String s) {
    for(int i = 0, j = s.length() - 1;i < j;i++,j--){
      if(s.charAt(i) != s.charAt(j)){
        //用了其他函数继续删除后的遍历
        return isPalindrome(s,i,j-1) || isPalindrome(s,i+1,j);
      }
    }
    return true;
  }
  private boolean isPalindrome(String s,int i,int j){
    while(i < j){
      if(s.charAt(i++) != s.charAt(j--)){
        return false;
      }
    }
  return true;
  }
}

你可能感兴趣的:(680.验证回文字符串II)