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。为什么会这样呢? (我知道可能有更好的解决方案,但我是初学者,我能想到的就是这个解决方案)
您试图将字符串的每个字符与末尾的每个其他字符进行比较,这不是检查回文的正确方法。回文字符串是向后读与向前读相同的字符串。因此,您只需检查第一个字符是否等于最后一个字符,第二个字符是否等于倒数第二个字符,依此类推,直到字符串的中间。
此外,您在 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.
}
};