leetcode 680. 验证回文字符串 Ⅱ
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: s = "aba"
输出: true
示例 2:
输入: s = "abca"
输出: true
解释: 你可以删除c字符。
示例 3:
输入: s = "abc"
输出: false
提示:
1 <= s.length <= 105
s 由小写英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
双指针,前后遍历字符串
1:获取长度length,若是长度小于3,则返回true.
2:设置 st 和end 两个变量,从前后开始遍历字符串,若是字符相同,则st++, end--。
3:若是遇到不行同的,则舍弃st,所以st++, 继续遍历。
4:若是再次遇到不相同的,则返回上一次遇到不相同的坐标,这次舍弃后面的, 即end--
5:若是第三次遇到不相同的,则返回false。
6:设置一个flag 来记录是第几次遇到不同字符。
public boolean validPalindrome(String s) { if (s == null) { return true; } int length = s.length(); if (length < 3) { return true; } int st = 0; int end = length - 1; int flag = 0; int st1 = 0; int end1 = 0; while (st < end) { if (s.charAt(st) == s.charAt(end)) { st++; end--; continue; } if (flag == 2) { return false; } if (flag == 0) { st1 = st; end1 = end; st++; } else { st = st1; end = end1; end--; } flag++; } return true; }