18943 小易爱回文
Description
网易2021校招笔试-音频算法工程师(提前批)
小易得到了一个仅包含大小写英文字符的字符串,该字符串可能不是回文串。
(“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串,“asds”就不是回文串。)
小易可以在字符串尾部加入任意数量的任意字符,使其字符串变成回文串。
现在请你编写一个程序,程序要能计算出小易可以得到的最短回文串。
输入格式
一行包括一个字符串S。S的长度小于1000。
输出格式
一行包括一个字符串,代表答案。
输入样例
noo
输出样例
noon
提示
注意回文串的长度可以是奇数,也可以是偶数。
拓展思考:如果长度达到100000,这个题目又该怎么处理呢?
思路:
循环比较第i次是否为回文串,不是的话在原来的长度后面插入s[i],插入后长度会变长,而每次插入的地方是固定原来长度的后面,不是s的最后
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string s;
int main()
{
cin >> s;
int len = s.size(); //原来字符串长度(固定)
//循环比较该字符串此时是否是回文串,是就返回,不是就插入字符(最多插入len个字符)
for(int i = 0;i < len;i++){
//判断是否为回文串
string t = s;
reverse(t.begin(),t.end());
if(t == s) break;//已经是回文串了,跳出循环
//不是回文串,在原来的字符串长度后面插入s[i] (相当于每次都在上一次插入的前面插入)
else{
s.insert(s.begin() + len,s[i]);//插入s[i]
}
}
cout << s << endl;
return 0;
}