周三
题目描述:
给定一个字符串 s,判断其是否为回文串。只考虑字母和数字字符,可以忽略字母的大小写。
设计思路:
- 首先需要去除字符串中的非字母数字字符,并将所有字母转换为小写(或大写)形式。
- 然后从字符串两端开始比较,如果不相等,则返回 false,否则继续比较。
- 当左右指针相遇时,表示字符串是回文串,返回 true。
程序流程图:
开始
去除 s 中的非字母数字字符,并将字母转为小写形式
初始化左指针 left = 0 和右指针 right = s.length()-1
while left < right do
    if s[left] != s[right] then 返回 false
    left++
    right--
end while
返回 true
结束
代码实现:
class Solution {
public:
    bool isPalindrome(string s) {
        string temp; //去掉非字母数字字符的字符串
        for (int i = 0; i < s.size(); i++) {
            if (isalnum(s[i])) temp += tolower(s[i]); //将字母转换为小写
        }
        int left = 0, right = temp.size()-1;
        while (left < right) {
            if (temp[left] != temp[right]) return false;
            left++;
            right--;
        }
        return true;
    }
};
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号