标签:while uil int start rom code ble substring 回文 时间
题目: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(); } }
标签:while uil int start rom code ble substring 回文 时间
原文地址:https://www.cnblogs.com/xtoshii/p/14227167.html