leetcode longest palindromic substring (medium) /java
Posted 天气晚来秋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode longest palindromic substring (medium) /java相关的知识,希望对你有一定的参考价值。
最长回文字串
上题:
测试用例中,注意aaabaaaa。
但是我time limit exceeded。用了极暴力的方法解。(三层循环)找每一个字符的最长回文字串。
1 /** 2 * 最长回文子串 3 * 2017-5-7 4 **/ 5 6 import java.io.*; 7 import java.util.*; 8 import java.lang.*; 9 10 public class Solution 11 { 12 public static String longestPalindrome(String s) 13 { 14 int len=s.length(); 15 char[] c=s.toCharArray(); 16 String str=new String("hz"); 17 int max=0; 18 int from=0,to=0; 19 int i,j,ii,jj; 20 for(i=0;i<len-1;i++) 21 { 22 ii=i; 23 for(j=len-1;j>0;j--) 24 { 25 jj=j; 26 while(c[i]==c[j]&&i<j-1) 27 { 28 i++;j--; 29 } 30 //System.out.println("i:"+i+"--j:"+j); 31 if(((i==j||(i+1==j&&(c[i]==c[j])))&&jj-ii>max)) 32 { 33 max=jj-ii; 34 from=ii; 35 to=jj; 36 //System.out.println(max+" -- "+ii+" -- "+jj); 37 } 38 i=ii; 39 j=jj; 40 41 } 42 } 43 //System.out.println(from+" -- "+to); 44 str=s.substring(from,to+1); 45 return str; 46 47 } 48 public static void main(String[] args) 49 { 50 51 System.out.println(longestPalindrome("aaabaaaa")); 52 } 53 54 }
挂在超级长的用例上了。
决定用动态规划。
【待更新】
更新:
1 int len=s.length(); 2 char[] c=s.toCharArray(); 3 String str=new String("hz"); 4 int max=0; 5 int from=0,to=0; 6 int i,j,ii,jj; 7 for(i=0;i<len-1;i++) 8 { 9 /* 10 if(c[i]==c[i+1]) 11 { 12 ii=i; 13 jj=i+1; 14 } 15 else 16 { 17 ii=i; 18 jj=i; 19 }*/ 20 ii=i; 21 jj=i+1; 22 while((c[ii]==c[jj])&&(ii>0)&&(jj<len-1)) 23 { 24 ii--; 25 jj++; 26 } 27 if(c[ii]==c[jj]) 28 { 29 ; 30 } 31 else 32 { 33 ii++; 34 jj--; 35 } 36 37 if(jj-ii>max) 38 { 39 max=jj-ii; 40 from=ii; 41 to=jj; 42 } 43 44 }
这是我改进后的代码。
发现ttaaatt测试用例输出时tt。恍然明白在if语句的时候它无法精准判断回文子串的奇偶性。
于是我奇偶都来一遍。
1 /** 2 * 最长回文子串 3 * 2017-5-7 4 **/ 5 6 import java.io.*; 7 import java.util.*; 8 import java.lang.*; 9 10 public class Solution 11 { 12 public static String longestPalindrome(String s) 13 { 14 int len=s.length(); 15 char[] c=s.toCharArray(); 16 String str=new String("hz"); 17 int max=0; 18 int from=0,to=0; 19 int i,j,ii,jj; 20 for(i=0;i<len-1;i++) 21 { 22 /* 23 if(c[i]==c[i+1]) 24 { 25 ii=i; 26 jj=i+1; 27 } 28 else 29 { 30 ii=i; 31 jj=i; 32 }*/ 33 ii=i; 34 jj=i+1; 35 while((c[ii]==c[jj])&&(ii>0)&&(jj<len-1)) 36 { 37 ii--; 38 jj++; 39 } 40 if(c[ii]==c[jj]) 41 { 42 ; 43 } 44 else 45 { 46 ii++; 47 jj--; 48 } 49 50 if(jj-ii>max) 51 { 52 max=jj-ii; 53 from=ii; 54 to=jj; 55 } 56 57 } 58 for(i=0;i<len-1;i++) 59 { 60 /* 61 if(c[i]==c[i+1]) 62 { 63 ii=i; 64 jj=i+1; 65 } 66 else 67 { 68 ii=i; 69 jj=i; 70 }*/ 71 ii=i; 72 jj=i; 73 while((c[ii]==c[jj])&&(ii>0)&&(jj<len-1)) 74 { 75 ii--; 76 jj++; 77 } 78 if(c[ii]==c[jj]) 79 { 80 ; 81 } 82 else 83 { 84 ii++; 85 jj--; 86 } 87 88 if(jj-ii>max) 89 { 90 max=jj-ii; 91 from=ii; 92 to=jj; 93 } 94 95 } 96 //System.out.println(from+" -- "+to); 97 str=s.substring(from,to+1); 98 return str; 99 100 } 101 public static void main(String[] args) 102 { 103 104 while(true) 105 { 106 Scanner input=new Scanner(System.in); 107 String s=input.nextLine(); 108 System.out.println(longestPalindrome(s)); 109 } 110 111 } 112 113 }
accepted。【2017-5-7】
虽然显得无比愚蠢==但是我也很绝望啊。
感觉还可以完善。
【待更新】
以上是关于leetcode longest palindromic substring (medium) /java的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode409. Longest Palindrome
[Leetcode]Longest Palindromic Substring
leetcode longest consecutive sequence