LeetCode 214. Shortest Palindrome

来源:互联网 发布:网络家装行业发展趋势 编辑:程序博客网 时间:2024/05/17 09:12
#include <string>#include <vector>#include <iostream>#include <algorithm>using namespace std;/*  Given a string S, you are allowed to convert it to a palindrome by adding  characters in from 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"*/string shortestPalindrome(string s) {  string t = s;  reverse(t.begin(), t.end());  string tmp = t + '#' + s;  int n = tmp.size();  vector<int> dp(n, 0);  for(int i = 1; i <= tmp.size(); ++i) {   // KMP algorithm    int j = dp[i-1];    while(j > 0 && (tmp[i] != tmp[j])) {      j = dp[j-1];    }    dp[i] = (j + (tmp[i] == tmp[j]));  }  return t.substr(0, s.size() - dp[tmp.size() - 1]) + s;}int main(void) {  cout << shortestPalindrome("abc") << endl;}

0 0
原创粉丝点击