680. 验证回文字符串 Ⅱ

1 判断回文可以使用双指针,也就是一个指向字符串的首位,向左移动, 一个指向字符串的尾部,向右移动
2 当出现指针指向的字符不相同的时候,可以把左边的字符移动一位s[left+1:right+1],或者把右边字符移动一位s[left:right] ,注意:go中字符区间是左闭右开的。
3 然后分别对当前的区间段的字符是否是回文字符串判断
4 因为判断的函数还是做双指针判断 ,非常符合递归把大问题化解成小问题,然后用小问题的结果来解决大问题的结果。
代码递归形式func validPalindrome(s string) bool {return palindromeHelp(s,true)}func palindromeHelp(s string,isDelete bool)bool{left :=0right :=len(s)-1for left<right{if s[left]!=s[right]{if isDelete{return palindromeHelp(s[left:right],false)||palindromeHelp(s[left+1:right+1],false)}else {return false}}left++right--}return true}非递归的形式func validPalindrome(s string) bool {left :=0right :=len(s)-1for left<right{if s[left]!=s[right]{return isPalindrome(s[left:right])||isPalindrome(s[left+1:right+1])}left++right--}return true}func isPalindrome(s string)bool{left :=0right :=len(s)-1for left<right{if s[left]!=s[right]{return false}left++right--}return true}
