java常用算法之最长回文子串(Longest Palindromic Substring)
来源:互联网 发布:java开源视频播放 编辑:程序博客网 时间:2024/04/30 14:03
方法一:时间复杂度为O(n^3)
public static String longestPalindrome1(String s) { int maxPalinLength = 0;String longestPalindrome = null;int length = s.length(); // check all possible sub stringsfor (int i = 0; i < length; i++) {for (int j = i + 1; j < length; j++) {int len = j - i;String curr = s.substring(i, j + 1);if (isPalindrome(curr)) {if (len > maxPalinLength) {longestPalindrome = curr;maxPalinLength = len;}}}} return longestPalindrome;} public static boolean isPalindrome(String s) { for (int i = 0; i < s.length() - 1; i++) {if (s.charAt(i) != s.charAt(s.length() - 1 - i)) {return false;}} return true;}
方法二:时间复杂度为O(n^2)
public static String longestPalindrome2(String s) {if (s == null)return null; if(s.length() <=1)return s; int maxLen = 0;String longestStr = null; int length = s.length(); int[][] table = new int[length][length]; //every single letter is palindromefor (int i = 0; i < length; i++) {table[i][i] = 1;}printTable(table); //e.g. bcba//two consecutive same letters are palindromefor (int i = 0; i <= length - 2; i++) {if (s.charAt(i) == s.charAt(i + 1)){table[i][i + 1] = 1;longestStr = s.substring(i, i + 2);}}printTable(table);//condition for calculate whole tablefor (int l = 3; l <= length; l++) {for (int i = 0; i <= length-l; i++) {int j = i + l - 1;if (s.charAt(i) == s.charAt(j)) {table[i][j] = table[i + 1][j - 1];if (table[i][j] == 1 && l > maxLen)longestStr = s.substring(i, j + 1);} else {table[i][j] = 0;}printTable(table);}} return longestStr;}public static void printTable(int[][] x){for(int [] y : x){for(int z: y){System.out.print(z + " ");}System.out.println();}System.out.println("------");}
给一个字符串,我们可以利用方法 printTable()
来输出执行结果. 例如, 字符串 "dabcba"执行上述代码片段后输出结果如下:
1 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1
从输出结果我们能清晰的看到最长的字符串在table[1][5].
0 0
- java常用算法之最长回文子串(Longest Palindromic Substring)
- 浅谈manacher算法 最长回文子串(Longest Palindromic Substring)
- LeetCode5. Longest Palindromic Substring(最长回文子串:Manacher算法)
- Longest Palindromic Substring 最长回文子串
- Longest Palindromic Substring-----最长回文子串
- longest palindromic substring(最长回文子串)
- 最长回文子串 Longest Palindromic Substring
- Longest Palindromic Substring 最长回文子串
- 最长回文子串(Longest Palindromic Substring)
- Longest Palindromic Substring 最长回文子串
- 最长回文子串 Longest Palindromic Substring
- Longest Palindromic Substring 最长回文子串
- Longest Palindromic Substring 最长回文子串
- LeetCode OJ 之 Longest Palindromic Substring (最长回文子串)
- 【LeetCode-面试算法经典-Java实现】【005-Longest Palindromic Substring(最长回文子串)】
- leetcode解题之5. Longest Palindromic Substring Java版(最长回文子串)
- 最长回文子序列 Longest Palindromic Substring
- Longest Palindromic Substring(最长回文子字符串)
- e.preventDefault()与e.stopPropagation()的区别
- Spring MVC —— 整体结构
- 设计模式-结构型模式汇总
- iOS 【错误:'Changing the delegate of a tab bar managed by a tab bar controller is not allowed.'】
- 一个写日志的方法
- java常用算法之最长回文子串(Longest Palindromic Substring)
- 快速理解Docker - 容器级虚拟化解决方案
- java的xpath语法
- if语句 return;结尾
- Java注解全面解析
- [案例]某体育用品公司在零售领域BI的产品应用解决方案
- Windows Server 2008最大内存限制
- RPC调用框架比较分析
- centos下安装openvpn