【字符串】680. 验证回文字符串 Ⅱ
作者:互联网
题目:
解答:
方法一:暴力法
算法:
对于给定字符串中的每个索 i,让我们删除该字符,然后检查结果字符串是否是回文。如果是(或者原始字符串是回文),那么我们将返回 true。
方法二:双指针
最重要一点:只能去掉一个字符
1、左指针从第0位开始,右指针从最后一位开始
2、定义一个bool容器,用于限定一次删除字符机会(左删或右删)
3、进入循环,判断左右指针对于字符是否相等,相等则left++,right--;否则使用一次删字符机会(左删或右删)
4、循环退出条件,删字符后左右字符依然不等,返回false,否则left>right,返回true.
1 class Solution { 2 public: 3 bool validPalindrome(string s) 4 { 5 int left = 0; 6 int right = s.size() - 1; 7 8 vector<bool> chance(2,false); 9 while(left <= right) 10 { 11 if(s[left] == s[right]) 12 { 13 left++; 14 right--; 15 } 16 else 17 { 18 if(!chance[0]) 19 { 20 left++; 21 chance[0] = true; 22 } 23 else if(!chance[1]) 24 { 25 right--; 26 left--;//回溯 27 chance[1] = true; 28 } 29 else 30 { 31 return false; 32 } 33 } 34 } 35 return true; 36 } 37 };
标签:字符,right,字符串,指针,回文,680,left 来源: https://www.cnblogs.com/ocpc/p/12823374.html