算法题之添加回文串

题目描述
对于一个字符串,我们想通过添加字符的方式使得新的字符串整体变成回文串,但是只能在原串的结尾添加字符,请返回在结尾添加的最短字符串。
给定原字符串A及它的长度n,请返回添加的字符串。保证原串不是回文串。

测试样例:
"ab",2

返回:"a"

 

分析:

这是一个讨巧的办法,
问题分解
1、找到最长的回文子串
2、剩余部分就是需要添加的子串

使用Naive查找,寻找最大公共串
这里用到了:翻转子串==原子串 =>回文子串
从原串的开头开始找,比较是否与翻转串的末尾相同
【这里用到了本题的特征:已有的回文子串肯定出现在末尾,不会出现在中间】
Example:
原串 abcdedc
翻转串 cdedcba

 

    string addToPalindrome(string A, int n) {
        // write code here
		string s = A;
        reverse(s.begin(),s.end()); // 取得翻转串
        for(int i=0;i<n;i++) // Naive查找
             if(A.substr(i,n-i)==s.substr(0,n-i))//求最长公共子串
                return s.substr(n-i,i);//返回公共集后面剩余字符串
        return string("");
    }

  

转载于:https://www.cnblogs.com/shixiangwan/p/6739925.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值