LeetCode 125.验证回文串 C++写法
思路🤔:
我们不对字符串进行删除,这样效率太低了,所以可以左右开工,下标begin和end遇到不是字母数字字符的就跳过,当两边都是字母就进行比对,一样就继续往后走,不一样就返回false。
代码🔎:
class Solution { public: bool isString(char& s) { if(s >= 'a' && s <= 'z') return true; if(s >= 'A' && s <= 'Z') //顺便将大写改为小写 { s += 32; return true; } if(s >= '0' && s <= '9') return true; return false; } bool isPalindrome(string s) { int i = 0; int end = s.size() - 1; int begin = 0; if(s.empty()) //为空直接返回 return true; while(begin < end) { while(begin < end && !isString(s[begin])) //不为数字字母就跳过 { begin++; } while(begin < end && !isString(s[end])) { end--; } if(s[begin] == s[end]) //相等,继续往后走 { begin++; end--; } else { return false; //不相等就返回 } } return true; } };