您的位置:首页 > 其它

回文字符串判断---递归实现

2013-08-30 11:16 323 查看
所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的。比如"level" 、 “aaabbaaa”

题目:判断一个字符串是否为回文

解法:递归

递归的作用在于把问题的规模不断缩少,直到问题缩少到能简单地解决

问:如何缩少问题规模?

答:通过观察可以知道,一个回文字符串其中内部也是回文。所以,我们只需要以去掉两端的字符的形式一层层检查,每一次的检查都去掉了两个字符,这样就达到了缩少问题规模的目的。

新问题与原问题有着相同的形式

当去掉两端字符后的字符串,其产生的新问题同样是检查这个字符串是否回文。

递归的结束需要简单情景

1. 字符串长度可能会奇数或偶数:

如果字符串长度是奇数,字符串会剩下最中间那位字符,但其不影响回文。当检查到长度为1的时候即代表此字符串是回文

如果字符串长度是偶数,当两端的字符串两两比较检查后不会剩下字符。即检查到长度为0的时候即代表此字符串是回文

2. 如果检查到两端两个字符不相同。则说明此字符串不是回文,直接返回0,不需要继续检查

#include <iostream>
#include <string>

using namespace std;
int strhui(int low,int high,string str,int length);

int main()
{
string str;
cout<<"please int a string."<<endl;
cin>>str;
int length = str.length();
int result;
if(result == 1)
cout<<"yes!"<<endl;
else
cout<<"NO"<<endl;
return 0;
}

int strhui(int low,int high,string str,int length)
{
if((length == 1) || (length ==0 ))
{
return 1;
}
if(str[low] != str[high])
return 0;
return strhui(low+1,high-1,str,length-2);
}


程序二:

#include <stdio.h>
#include <string.h>

void huiwen(char str[])
{
int i,len;
bool flag = true;
len=strlen(str);
for(i=0;i<len/2;i++)
{
if(str[i]!=str[len-i-1])
{
flag=false;
break;
}
}
if(flag == false)
printf("%s 不是一个回文数\n",str);
else
printf("%s 是一个回文数\n",str);
}

void main()
{
char str[100] = {0};
printf("Input a string:");/*提示Input a string:*/
scanf("%s", str);      /*scanf()函数输入一个字符串:*/
huiwen(str);
getchar();
}


原文链接:http://blog.csdn.net/cbs612537/article/details/8217425
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: