LeetCode 214: Shortest Palindrome
2016-06-30 14:46
477 查看
214. Shortest Palindrome
Difficulty: HardGiven 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; } };
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C++的template模板中class与typename关键字的区别分析
- C与C++之间相互调用实例方法讲解