C ++编码逻辑 - 各种想法

时间:2010-07-03 11:09:42

标签: c++ stl

我想写一个方法来确定给定的字符串是否是回文结构。例如。 “我是亚当女士”,或“男人,计划,运河,巴拿马”。

该功能的原型是:

bool is_palindrome(char const * str)

我有一个简单的逻辑来通过向前和向前检查相等性。从字符串的末端向后。但是,我想知道有多少有效的方法可以做到这一点?欢迎来自C ++大师的所有想法..

1 个答案:

答案 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;
}