题目描述
最多删除一个字符得到回文
给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。
输入: s = "aba"输出: true
输入: s = "abca"输出: true解释: 可以删除 "c" 字符 或者 "b" 字符
输入: s = "abc"输出: false
提示:
- 1 <= s.length <= 105
- s 由小写英文字母组成
解题思路
最多删除一个字符,这要考虑两种情况,
一是删除左失配字符,二是删除右失配字符
因此要给两次机会实现代码
public boolean validPalindrome(String s) {int count = 2;// 双指针int i = 0;int j = s.length() - 1;// 记忆i,j失配的位置,便于回溯int memi = 0;int memj = 0;while (i < j) {if (s.charAt(i) != s.charAt(j)) {if (count == 2) {// 先尝试删除左边count--;memi = i++;memj = j;continue;}else if (count == 1) {// 尝试删除右边count--;i = memi;j = --memj;continue;}else {return false;}}i++;j--;}return true;}
时间及空间复杂度分析
时间O(n)
空间O(1)
拓展思路
