您的位置:首页 > 编程语言 > C语言/C++

LeetCode 214: Shortest Palindrome

2016-06-30 14:46 477 查看

214. Shortest Palindrome

Difficulty: Hard

Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. Find and return the shortest palindrome you can find by performing this transformation.

For example:

Given “aacecaaa”, return “aaacecaaa”.

Given “abcd”, return “dcbabcd”.

思路

在字符串前面添加字符是之成为回文,先找到以字符串的第一个字符开始的最长回文子串,再将剩余的子串反转后添加到字符串前,最终结果即为最短回文。

回文反转的结果是自身。字符串反转后,字符串中的回文子串不变。因此,可以先反转字符串,再找到两个字符串最长相同子串(子串为字符串前缀,反转字符串后缀),最长相同子串即为最长回文子串。

代码

[C++]

class Solution {
public:
string shortestPalindrome(string s) {
string rs = s;
reverse(rs.begin(), rs.end());
int len = s.size();
int i = len;
for(; i > 0; --i) {
string sub = s.substr(0, i);
string rsub = rs.substr(len - i);
if (sub == rsub)
break;
}
string res = rs.substr(0, len - i) + s;
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode C++ palindrome