对于一个字符串,我们想通过添加字符的方式使得新的字符串整体变成回文串,但是只能在原串的结尾添加字符,请返回在结尾添加的最短字符串。
给定原字符串A及它的长度n,请返回添加的字符串。保证原串不是回文串。
"ab",2
返回:"a"
string addToPalindrome(string A, int n) {
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("");
}
//每次删除掉第一个字符,将这个删除掉的字符放入一个新串中
//如果删除后的字符串是回文串则返回,否则继续第一步
//逆序ans返回
class Palindrome {
bool judge(string str){
string tmp = str;
reverse(tmp.begin(), tmp.end());
return tmp==str;
}
public:
string addToPalindrome(string str, int n) {
reverse(str.begin(), str.end());
string ans;
while (!str.empty()) {
ans.push_back(str.back());
str.pop_back();
if(judge(str))
break;
}
reverse(ans.begin(), ans.end());
return ans;
}
};
原文:http://www.cnblogs.com/dd2hm/p/7260315.html