剑指 Offer II 019. 最多删除一个字符得到回文(680. 验证回文串 II)
题目:
思路:
【1】基于回文字符串的思维,采用双指针,如果字符相同就两个都移动,那么如果不同呢,那么就是要才去其中一个去除掉。其实用递归比较合适,只要设置一个标志位就可以了(可以考虑int类型),哈哈,如果变化成删除多个,就改一下标志位。
代码展示:
基于回文字符串思维的方式:
//时间4 ms击败100% //内存42.4 MB击败9.55% //时间复杂度:O(n),其中 n 是字符串的长度。 //判断整个字符串是否是回文字符串的时间复杂度是 O(n),遇到不同字符时,判断两个子串是否是回文字符串的时间复杂度也都是 O(n)。 //空间复杂度:O(1)。只需要维护有限的常量空间。 class Solution { public boolean validPalindrome(String s) { return toValidPalindrome(s,0, s.length()-1,false); } public boolean toValidPalindrome(String s, int low, int high,Boolean tag) { while (low < high) { char c1 = s.charAt(low), c2 = s.charAt(high); if (c1 == c2) { ++low; --high; } else { if (!tag) return toValidPalindrome(s, low, high - 1,true) || toValidPalindrome(s, low + 1, high,true); return false; } } return true; } }