conda、miniconda 、anaconda、 virtualenv的區別與miniconda的安裝配置
阿新 • • 發佈:2020-12-31
題目:https://leetcode-cn.com/problems/longest-palindromic-substring/
給定一個字串s
,找到s
中最長的迴文子串。你可以假設s
的最大長度為 1000
我的是暴力解法,最終勉強通過了
第一次答案:
通過遍歷從頭到尾的所有字串來比較,找到最長的迴文子串,最終超時了
class Solution { public String longestPalindrome(String s) { if(s.equals("")) return ""; if(s.length()==1) return s; int start=0; // res=0, String ans="",res=""; for(start=0;start<s.length();start=start+1){ for(int i=start+1;i<=s.length();i=i+1){ ans = s.substring(start,i); if(palindrome(ans)){ // res = ans.length res = res.length()>ans.length()?res:ans; } } } return res; } public static boolean palindrome(String s){ //判斷子串是否為迴文子串 char c[] = s.toCharArray(); int i=0,j=c.length-1; while(i<=j){ if(c[i]!=c[j]) return false; i=i+1; j=j-1; } return true; } }
優化:
將比較時的字串操作轉換為在陣列中進行,減少字串的建立,銷燬時間,最終勉強通過
class Solution { public static String longestPalindrome(String s) { if(s.equals("")) return ""; if(s.length()==1) return s; int start=0; char[] c = s.toCharArray(); String ans="",res=""; int len=0; for(start=0;start<c.length;start+=1){ for(int i=start+1;i<=c.length;i+=1){ if(palindrome(c,start,i-1) && (i-start)>len){ ans = getString(c,start,i); len = i-start; } } } return ans; } public static boolean palindrome(char[] c,int left,int rigth){ // char c[] = s.toCharArray(); // int i=0,j=c.length-1; while(left<=rigth){ if(c[left]!=c[rigth]) return false; left+=1; rigth-=1; } return true; } public static String getString(char[] c, int left, int right){ StringBuilder sb = new StringBuilder(); for(int i=left;i<right;i+=1){ sb.append(c[i]); } return sb.toString(); } }