文章目录
原题题目
代码实现(首刷小部分看解 复习了一遍KMP 较为困难)
class Solution {
public:
void getnext(vector<int>& next,string& str)
{
int nextpos = 1,pos = 0,size = str.size();
while(nextpos < size)
{
while(pos && str[nextpos] != str[pos]) pos = next[pos - 1];
bool equal = (str[nextpos] == str[pos]);
pos = pos + equal;
next[nextpos] = pos;
++nextpos;
}
next[0] = 1;
}
string shortestPalindrome(string s) {
if(s.empty()) return {};
string str = s;
str += "#";
str += s;
reverse(str.begin() + s.size() + 1,str.end());
int size = str.size();
vector<int> next(str.size(),0);
getnext(next,str);
int save = next[size-1];
string ret = s.substr(save);
reverse(ret.begin(),ret.end());
ret += s;
return ret;
}
};