
代码如下:
#include <iostream>
#include <cstdlib>
#include <string>
#include <algorithm>
using namespace std
bool IsHW(const string&str)
{
string s=str
reverse(s.begin(),s.end())
return s==str
}
int main()
{
string str
while(cin>>str)
{
if(str.empty()||str.length()==1)
{
cout<<"YES"
}
else
{
bool ret=false
string tmp
int n=str.length()
for(int i=0i<n++i)
{
tmp=str.substr(0,i)+str.substr(i+1)
//将i位置的字符去掉
if(IsHW(tmp))
{
ret=true
break
}
}
if(ret)
cout<<"YES"<<endl
else
cout<<"NO"<<endl
}
}
return 0
}
扩展资料:
reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数没有返回值
template <class BidirectionalIterator>
void reverse (BidirectionalIterator first, BidirectionalIterator last)
{
while ((first!=last)&&(first!=--last))
{
std::iter_swap (first,last)
++first
}
}
关于这个问题,必须要具体问题具体分析。如果前提是:保证某个非回文字符串通过只要添加一个字母,肯定能够使它变为回文串的话,那么从程序设计的角度上讲,就必然是可以通过编写程序代码的方式实现;但是如果前提是:并不能够保证:对非回文字符串只要添加一个字母,就肯定能够使该串变为回文串的话,那么你无论如何通过程序设计、编写代码的方式,也无法将其变为回文串。现在的问题就是:并没有一个通用的数学定理能够证明、并保证该结论成立。所以才会有我前面所说的:需要具体问题具体分析。例如如下例子:
对于 ab 字符串,本身不是回文串(反过来是字符串:ba),但是通过在小写字母 b 的后面添加一个小写字母 a,可以使其成为回文串,即:aba(正向、反向内容都相同)
但是对于 abcd 字符串,本身不是回文串(反过来是字符串:dcba),但是无论通过什么方法,都无法做到只添加一个字母,使其成为一个回文串。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)