判断一个字符串是否为回文,可以通过以下几种方法:
双指针法
使用两个指针,一个指向字符串的开头,另一个指向字符串的末尾。
逐个比较两个指针所指向的字符,如果所有对应位置的字符都相同,则该字符串是回文。
时间复杂度为O(n),空间复杂度为O(1)。
暴力法
将字符串翻转后与原字符串进行比较。
如果翻转后的字符串与原字符串相同,则该字符串是回文。
时间复杂度为O(n),空间复杂度为O(n)。
递归法
将字符串分成两个部分,分别判断左半部分和右半部分是否相等。
如果左半部分和右半部分相等,则该字符串是回文。
时间复杂度为O(n),空间复杂度为O(n)。
字符串反转法
将字符串反转后与原字符串进行比较。
如果反转后的字符串与原字符串相同,则该字符串是回文。
时间复杂度为O(n),空间复杂度为O(n)。
示例代码
```cpp
include include bool isPalindrome(const std::string& str) { int left = 0; int right = str.length() - 1; while (left < right) { if (str[left] != str[right]) { return false; } left++; right--; } return true; } int main() { std::string input; std::cout << "请输入一个字符串: "; std::getline(std::cin, input); if (isPalindrome(input)) { std::cout << "字符串 \"" << input << "\" 是回文字符串。" << std::endl; } else { std::cout << "字符串 \"" << input << "\" 不是回文字符串。" << std::endl; } return 0; } ``` 解释 `left` 指向字符串的开头,`right` 指向字符串的末尾。 在每次循环中,比较 `str[left]` 和 `str[right]`,如果不相等,则返回 `false`。 如果所有对应位置的字符都相等,则返回 `true`。 从用户输入读取字符串。 调用 `isPalindrome` 函数判断字符串是否为回文。 根据判断结果输出相应的信息。 这种方法简单高效,适用于大多数情况。双指针法
主函数