我想写一个方法来确定给定的字符串是否是回文结构。例如。 “我是亚当女士”,或“男人,计划,运河,巴拿马”。
该功能的原型是:
bool is_palindrome(char const * str)
我有一个简单的逻辑来通过向前和向前检查相等性。从字符串的末端向后。但是,我想知道有多少有效的方法可以做到这一点?欢迎来自C ++大师的所有想法..
答案 0 :(得分:1)
我认为没有更有效的方法,你必须比较字符串中的每个字符。
可能的优化:您只需要检查字符串的前半部分,并且一旦发现不匹配就可以提前中断。
bool is_palindrome(char const * str)
{
size_t len = strlen(str);
bool isPalindrome = false; // It's debatable if a blank string is a palindrome or not
for(int i = 0; i < len / 2; i++)
{
if(str[i] != str[len - i - 1])
{
isPalindrome = false;
break;
}
isPalindrome = true;
}
return isPalindrome;
}