leetcode 回文数 c++

问题描述 投票:0回答:1
class Solution {
public:
    bool isPalindrome(int x) {
        std::string s = std::to_string(x);
        bool returnthis = false;
        for (int i=0;i<s.size();i++){
                for (int j=s.size()-1;j>=0;j=j-1){
                if (s[i]==s[j]){
                    bool returnthis = true;
                }
            }
        }
        return returnthis;
    }
};

我正在尝试使用字符串解决回文问题,但在我的代码中,returnthis 布尔值永远不会变为 true。为什么会这样呢? (我知道可能有更好的解决方案,但我是初学者,我能想到的就是这个解决方案)

c++ c++11 c++17 c++14 palindrome
1个回答
0
投票

您试图将字符串的每个字符与末尾的每个其他字符进行比较,这不是检查回文的正确方法。回文字符串是向后读与向前读相同的字符串。因此,您只需检查第一个字符是否等于最后一个字符,第二个字符是否等于倒数第二个字符,依此类推,直到字符串的中间。

此外,您在 if 语句中声明了一个局部变量

returnthis
,它隐藏了函数开头定义的
returnthis
变量。这个内部
returnthis
与您在函数末尾返回的变量不同。外部
returnthis
的值永远不会改变并保持
false

而是尝试使用两个指针,例如

i
j
以及 while 循环,来比较字符串开头和结尾的字符,向中心移动。

class Solution {
public:
    bool isPalindrome(int x) {
        std::string s = std::to_string(x);
        int i = 0;
        int j = s.size() - 1;
        while (i < j) {
            if (s[i] != s[j]) {
                return false; // If characters at i and j are not equal, it's not a palindrome.
            }
            i++;
            j--;
        }
        return true; // If we checked all character pairs successfully, it's a palindrome.
    }
};
© www.soinside.com 2019 - 2024. All rights reserved.