LeetCode:Longest Palindromic Substring
来源:互联网 发布:mac flash player 编辑:程序博客网 时间:2024/04/26 18:42
题目描述:Longest Palindromic Substring
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
思路一:
中心扩展法:就是把给定的字符串的每一个字母当做中心,向两边扩展,这样来找最长的子回文串。算法复杂度为O(N^2)。
但是要考虑两种情况:1、像aba,这样长度为奇数。2、像abba,这样长度为偶数。
class Solution { public String longestPalindrome(String s) { int len = s.length(); if (s == null || len <= 1) return s; int start = 0; int longestLen = 0; // 当回文串的长度为奇数时 for (int i = 1; i < s.length(); i++) { int j = i - 1, k = i + 1; while (j >= 0 && k < s.length() && s.charAt(j) == s.charAt(k)) { if (longestLen < k - j + 1) { longestLen = k - j + 1; start = j;// 记录下最长子回文串的起始点 } j--; k++; } } // 当回文串的长度为偶数时 for (int i = 0; i < s.length(); i++) { int j = i, k = i + 1; while (j >= 0 && k < s.length() && s.charAt(j) == s.charAt(k)) { if (longestLen < k - j + 1) { longestLen = k - j + 1; start = j;// 记录下最长子回文串的起始点 } j--; k++; } } if (start == 0 && longestLen == 0) return s.charAt(0) + ""; return s.substring(start, start + longestLen); }}
思路二:
DP 思路:
P[i][j]是记录i到j子串是不是回文串
P(i,j)={true,if the substring Si…Sj is a palindrome;false,if the substring Si…Sj is not a palindrome}
那么可以得到:P(i,j)=(P(i+1,j−1) && Si==Sj)
代码:
时间复杂度O(n^2),空间复杂度O(n^2)
class Solution { public String longestPalindrome(String s) { int len = s.length(); if (s == null || len < 2) return s; boolean[][] dp = new boolean[len][len]; int left = 0, right = 0, maxLen = 0; for (int j = 0; j < len; j++) { for (int i = 0; i < j; i++) { // 如果s[i] == s[j] 回文性质由 s[i+1][j-1] 决定 if (s.charAt(i) == s.charAt(j) && (j - i <= 2 || dp[i + 1][j - 1])) { dp[i][j] = true; if (j - i + 1 > maxLen) { maxLen = j - i + 1; left = i; right = j; } } } } if (left == right)//如果没有回文串,输出第一个字符 return s.charAt(0) + ""; return s.substring(left, right + 1); }}
思路三:
这里写代码片
—–乐于分享,共同进步
—–Any comments greatly appreciated
0 0
- 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
- 汇编基础
- Data.Structures.and.Algorithms数据结构电子书最新
- 语句
- 图像金字塔及尺寸缩放
- POJ
- LeetCode:Longest Palindromic Substring
- 【剑指Offer】重建二叉树 解题报告
- VR系列——Oculus Rift 介绍指南:二、建议的规格
- CentOS 7上安装apache
- iOS之UIPickerView使用(一)
- 程序员面试金典——寻找下一个结点
- 安全
- [IOS APP] 夜听刘筱
- 河南省第六届ACM程序设计大赛(共7道,目前只做了三道。待续)