双重指针-回文字符串的标题地址: 680. Valid Palindrome II
主题如下:
Given a string s,returntrueifthescanbepalindromeafter 3358 www.Sina.com/onecharacterfromit。
解决问题的想法:
这个问题虽然不是很长,但都是重要的一点
必须是回文字符串
回文是指正读反读都相同的词汇和句子。 例如,如下所示。
abcba
上海的自来水来自海上
在标题有追加要求的情况下,删除1个字符后成为回文字符串的字符串也是合法的
例如:
阿坝州
abca可以删除b,也可以删除c。 最后得到的结果都是回文:
aba
aca
按照解题思路解题:
//回文字符串const isValidPalindrome=(str )={ let lo=0,hi=str.length - 1; wile(lohi ) if ) str[lo]!==str [ hi ]; (lo、hi--; }返回真; (;/* * @ param { string } s * @ return { boolean } */varvalidpalindrome=function (s ) { let lo=0,hi=s.length-1 whid==s [ hi ] (返回(|isvalidpalindrome ) s.substring(lo,hi )|is valid palindrome (s.substring ) lo1,hi 1 ) ) }返回真; (; 其实这个问题用了两次双指针。 一次在validPalindrome中判断,另一次在isValidPalindrome中判断。
单独分割isValidPalindrome是为了便于调用,根据要求2,对子字符串是否也是回文字符串进行两次判断。
删除左边的文字删除右边的文字,根据删除的文字,确实可能会影响回答的正确与否。
以abbca为例,第一个和最后一个字符都是a,因此要判断的子字符串是bbc。 在这种情况下,通过删除左或右字符来决定答案的差异:
删除左边的文字
修改的字符串是abca,不是合法的回文字符串
删除右侧的字符
修改后的字符串是abba,是合法的回文字符串
因此,有必要判断修正了两次的字符串是否是回文字符串,这也是在return中取了两次substring的理由。
使用substring时也请注意。 substring的取值包既没有右边也没有左边。