C++给定一个字符串,添加若干字符,使得字符串变为回文字符串,请问怎样能让这个字符串最短?
代码如下:
#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=0;i<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;
}
}
#include <iostream>
#include <algorithm>
using namespace std;
bool IsHW(const string& str)
char Str[100];
scanf("%s", Str);
if(judge(Str))
printf("Yes\n");
else
对于ab字符串,本身不是回文串(反过来是字符串:ba),但是通过在小写字母b的后面添加一个小写字母a,可以使其成为回文串,即:aba(正向、反向内容都相同)
但是对于abcd 字符串,本身不是回文串(反过来是字符串:dcba),但是无论通过什么方法,都无法做到只添加一个字母,使其成为一个回文串。
扩展资料:
字符串或串(String)是由数字、字母、下划线组成的一串字符。一般记为 s=“a1a2···an”(n>=0)。它是编程语言中表示文本的数据类型。在程序设计中,字符串(string)为符号或数值的一个连续序列,如符号串(一串字符)或二进制数字串(一串二进制数字)。
通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。
参考资料来源:百度百科-字符串
如果嫌时间复杂度高可以二分答案。
2017-07-18