leetcode - Shortest Palindrome
来源:互联网 发布:爱笑会议室解散 知乎 编辑:程序博客网 时间:2024/05/15 23:49
题目:leetcode
Shortest Palindrome
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"
.
从输入字符串的某一位或某两位开始向两边扩展(左右两边的字符相等), 如果能一直扩展到字符串的头部, 则将末尾余下的reverse,再加到原字符串的头部,即可.
class Solution {public: string shortestPalindrome(string s) { if(s.size()<=1) return s; int size=s.size(); int center= size & 1? (size-1)/2:size/2; for(int i=center;i>=0;--i) { string s1=(i-1>=0 && s[i-1]==s[i])?shortestPalindrome_core(s,i-1,i):""; string s2=shortestPalindrome_core(s,i,i); if(!s1.empty() || !s2.empty()) { if(!s1.empty() && !s2.empty()) return s1.size()>s2.size()?s2:s1; else return !s1.empty()?s1:s2; } } }string shortestPalindrome_core(const string &s,int l,int r){ if(l==0) { if(r==0) { string tmp=s.substr(1,s.size()-1); reverse(tmp.begin(),tmp.end()); tmp=tmp+s; return tmp; } else { string tmp(s.begin()+2,s.end()); reverse(tmp.begin(),tmp.end()); tmp=tmp+s; return tmp; } } int i=l-1,j=r+1,size=s.size(); //注意 i和j都应该在合理范围内 while(i>=0 && j<size && s[i]==s[j]) { --i; ++j; } if(i==-1) { if(j==s.size()) return s; string tmp(s.begin()+j,s.end()); reverse(tmp.begin(),tmp.end()); tmp=tmp+s; return tmp; } else return "";}};
最优的解法,见 这里。
0 0
- leetcode 214: Shortest Palindrome
- leetcode - Shortest Palindrome
- LeetCode Shortest Palindrome
- 【回文】leetcode - Shortest Palindrome
- Shortest Palindrome Leetcode Java
- Shortest Palindrome leetcode-java
- [LeetCode] Shortest Palindrome I
- LeetCode - Shortest Palindrome (KMP)
- LeetCode #214 Shortest Palindrome
- [leetcode] 214.Shortest Palindrome
- Shortest Palindrome -- leetcode
- LeetCode 214. Shortest Palindrome
- leetcode 214: Shortest Palindrome
- leetcode:Shortest Palindrome
- LeetCode之Shortest Palindrome
- [LeetCode 214] Shortest Palindrome
- Leetcode -- Shortest Palindrome
- LeetCode Shortest Palindrome
- [LeetCode]Minimum Size Subarray Sum
- OpenPilot源码在Windows下的编译
- 解决WIN10 10122 Itunes识别iPhone
- javascript---正则式(一)
- Android动画
- leetcode - Shortest Palindrome
- 1017. Queueing at Bank (25)
- unity进入一定范围之后播放音乐
- 分配到文章操作。
- IOS大图片处理(附源码)
- Nginx系列(十四. nginx缓存)
- 5月19日作业
- jQuery表单选择器
- Swift中文教程(六)函数