[LeetCode]Longest Palindromic Substring
来源:互联网 发布:约瑟夫环算法 数组 编辑:程序博客网 时间:2024/04/30 08:38
最大回文数
先介绍一种O(n^2)的方法https://github.com/TonyChouZJU/LeetCode/tree/master/119.%20Longest%20Palindromic%20Substring
假设 S(i, j) 为问题的解,即从位置 i 到 j 的字符串是 Longest Palindromic Substring of the string.
我们从最简单的字符串来想:
a
单字符本身是否是回文?是。即 S(i, i)
a a
两个相同字符是否组成回文?是。即 S(i, i+1) when s[i] == s[i+1].
b a a b
为上面的回文字符串首尾增加一个相同的字符 b, 组成了回文,即 S(i, j) when S(i+1, j-1) and s[i] == s[j].
由于我们持续在首尾增加字符,对于单字符,则长度一直为奇数;对于双字符,则长度一直为偶数。所以要涵盖所有情况,需要分别验证这两种情况。
好了,分析到这里基本可以明白回文的规律所在了。
要求的是长度,那么我们记 Longest Palindromic Substring 为 longest.
void longestPalindrome(const string& s, int b, int e, int &start, int &last) {
// 这个函数尝试对现有子串首尾扩张,若出现更大的长度,则记录之。
int len = s.size();
while (b >= 0 && e < len && s[b] == s[e])
–b, ++e;
++b, –e;
if (e - b > last - start) {
start = b;
last = e;
}
}
主函数里就非常轻松惬意了。
string longestPalindrome(string s) { int len = s.size(); if (len == 0) return s; int start = 0, last = 0; for (int i=0; i<len-1; ++i) { longestPalindrome(s, i, i, start, last); // 奇数情况 longestPalindrome(s, i, i+1, start, last); // 偶数情况 } return s.substr(start, last-start+1);}
时间复杂度应该在 O(n^2), 空间复杂度为 O(1). 属于常规解法。
- LeetCode: Longest Palindromic Substring
- LeetCode Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [Leetcode] Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Leetcode : Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- LeetCode-Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Longest Palindromic Substring leetcode
- LeetCode Longest Palindromic Substring
- LeetCode - Longest Palindromic Substring
- LeetCode -- Longest Palindromic Substring
- LeetCode | Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- ppt转换成pdf转换器应用介绍
- plist文件中的Boolean类型
- 治愈系--致郁系
- 使用STM32F4XX自带数学库"arm_math.h"
- 第一个自己完成的leetcode( JAVA) Implement Queue using Stacks
- [LeetCode]Longest Palindromic Substring
- c#猜猜看
- 循环下的radio操作
- BAPI_PO_CREATE
- 数据挖掘方向
- TCP协议和UDP协议简单实例
- 怎样将MathType中的公式加入到iBooks Author
- yaml随笔记(一)
- openwrt uci常用命令