leetcode 214. Shortest Palindrome

来源:互联网 发布:软件安全性控制 编辑:程序博客网 时间:2024/05/20 09:45

题目:

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".

思路:

翻转后找相等的最大前后缀,没优化,应该可以不用翻转,直接比较。

class Solution {public:    string shortestPalindrome(string s) {        string t = s;        reverse(t.begin(),t.end());        if(t == s) return t;        int i = t.size()-1;        for( ;i >=0;i--){            if(t.substr(t.size()-1-i,i)==s.substr(0,i)) {                break;            }        }        return t.substr(0,t.size()-1-i) + s;    }};
最优:
class Solution {public:    string shortestPalindrome(string s) {        int n = s.length();        int i = 0, j = n - 1;        while (j >= 0) {            if (s[i] == s[j]) ++i;                        --j;        }                if (i == n) return s;        string suffix = s.substr(i);        return string(suffix.rbegin(), suffix.rend()) + shortestPalindrome(s.substr(0, i)) + suffix;    }


原创粉丝点击