思路:

题目的主要信息:

  • 判断字符串是否是回文字符
  • 回文字符即首尾相互往中靠,字符都是相同的

方法一:首尾依次比较法
具体做法:
两个指针,一个在字符串首,一个在字符串尾,在首的指针往后走,在尾的指针往前走,依次比较路过的两个字符是否相等,直到两指针在中间相遇。(我们这里用下标代替指针
图片说明

class Solution {
public:
    bool judge(string str) {
        int left = 0; //首
        int right = str.length() - 1;  //尾
        while(left < right){  //首尾往中间靠
            if(str[left] != str[right]) //比较前后是否相同
                return false;
            left++;
            right--;
        }
        return true;
    }
};

复杂度分析:

  • 时间复杂度:,最多遍历半个字符串
  • 空间复杂度:,除了临时变量,无额外空间

方法二:反转字符串比较法
具体做法:
因为回文字符串首尾部分相同,所以可以将其用reverse函数反转,若是还是与原来的字符串相等,则是回文字符串。

class Solution {
public:
    bool judge(string str) {
        string temp = str;
        reverse(str.begin(), str.end()); //反转字符串
        if(temp == str)
            return true;
        return false;
    }
};

复杂度分析:

  • 时间复杂度:,逆转和比较都是
  • 空间复杂度:,辅助字符串temp记录原来的字符串