我想写一个方法来确定给定的字符串是否是回文。例如。 “女士我是亚当”,或者“一个男人,一个计划,一条运河,巴拿马”。C++编码逻辑 - 各种想法
的原型的功能是:
bool is_palindrome(char const * str)
我有一个简单的逻辑通过从字符串的最末端后向前进&以检查是否相等。但是,我想知道有多少有效的方法来做到这一点?所有的想法都欢迎来自C++大师。
我想写一个方法来确定给定的字符串是否是回文。例如。 “女士我是亚当”,或者“一个男人,一个计划,一条运河,巴拿马”。C++编码逻辑 - 各种想法
的原型的功能是:
bool is_palindrome(char const * str)
我有一个简单的逻辑通过从字符串的最末端后向前进&以检查是否相等。但是,我想知道有多少有效的方法来做到这一点?所有的想法都欢迎来自C++大师。
我不认为有一种更有效的方法,你必须比较字符串中的每个字符。
可能的优化:您只需检查字符串的前半部分,并且一旦发现不匹配就可以尽早突破。
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;
}
如果源代码使用两个指针而不是数组索引器,则编译代码可能更紧密;例如'if(* startPtr ++!= * endPtr--){...}' – ChrisW 2010-07-03 11:55:47
有http://stackoverflow.com/questions/248161/palindrome-detection-efficiency和http://stackoverflow.com/questions/228518/palindrome-golf。可能的重复? – pmr 2010-07-03 11:17:44
请注意,如果严格忽略空格,标点符号和大写字母(几乎通用的条件,BTW),那么这两个示例都只是回文。这将如何影响你的方法?是否值得实施其中一项或多项变体的代码?你会怎么做?你能为所有可能的组合提供一个干净的界面吗?一旦你这样做了,*然后*你明白你的问题。干杯。 – dmckee 2010-07-03 22:58:29