第四章_回文判断

来源:互联网 发布:数据结构常用算法 编辑:程序博客网 时间:2024/06/07 20:13

回文,英文palindrome,指一个顺着读和反过来读都一样的字符串,比如madam、我爱我,这样的短句在智力性、趣味性和艺术性上都颇有特色,中国历史上还有很多有趣的回文诗。

那么,我们的第一个问题就是:判断一个字串是否是回文?

解法一

同时从字符串头尾开始向中间扫描字串,如果所有字符都一样,那么这个字串就是一个回文。采用这种方法的话,我们只需要维护头部和尾部两个扫描指针即可,代码如下::

#include<iostream>#include<cstring>using namespace std;bool isPalindrome(char *s,int n){if(s==NULL||n<1){return false;}char* first;char* last;first=s;last=s+n-1;while(first<=last){if(*first!=*last){return false;}first++;last--;}return true;}int main(){char*str1="madam";char*str2="madaam";cout<<isPalindrome(str1,5)<<endl;cout<<isPalindrome(str2,6)<<endl;return 0;}

解法二

上述解法一从两头向中间扫描,那么是否还有其它办法呢?我们可以先从中间开始、然后向两边扩展查看字符是否相等。参考代码如下:

#include<iostream>#include<cstring>using namespace std;bool isPalindrome(char *s,int n){if(s==NULL||n<1){return false;}char* middle1;char* middle2;int m;m=(n/2-1)>=0?(n/2-1):0;middle1=s+m;middle2=s+n-m-1;while(middle1>=s){if(*middle1!=*middle2){return false;}middle1--;middle2++;}return true;}int main(){char*str1="madam";char*str2="madaam";cout<<isPalindrome(str1,5)<<endl;cout<<isPalindrome(str2,6)<<endl;return 0;}



 

0 0
原创粉丝点击