标签: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