18943 小易爱回文

这篇博客介绍了一种解决如何通过最少字符插入将非回文串转化为回文串的方法。通过循环检查字符串是否为回文,并在适当位置插入字符,最终找到最短的回文串。示例中给出了对于输入字符串'noo',输出'noon'的解决方案。当字符串长度扩大到100000时,讨论了处理策略。
摘要由CSDN通过智能技术生成

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;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值