题目内容
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
示例 3:
输入:s = “a”
输出:“a”
示例 4:
输入:s = “ac”
输出:“a”
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
java解答(中心扩散)
- 从左向右遍历数组的长度,以当前位置或者当前位置和前一个位置为回文中心,然后向两边扩散
- 考虑奇数结果和偶数结果
- 单写一个函数实现两种结果
class Solution {
public String longestPalindrome(String s) {
int n=s.length();
String max="";
char [] str=s.toCharArray();
for(int i=0;i<n;i++){
//奇数情况的时候
String c=hw1(s,i,i);
//偶数情况的时候
String d=hw1(s,i,i+1);
if(max.length()<c.length()){
max=c;
}
if(max.length()<d.length()){
max=d;
}
}
return max;
}
public static String hw1(String s,int a,int b){
int left=a;
int right=b;
while(left>=0 &&right<s.length()){
if(s.charAt(left)==s.charAt(right)){
left--;
right++;
}else{
break;
}
}
//因为此时出来的left 和right已经都多加1了,截取时候包左不包右
return s.substring(left+1,right);
}
}
- 感觉这样时间更快,就是单纯把数组也放进去,然后取元素比较比让字符串某个位置转字符快一点
class Solution {
public String longestPalindrome(String s) {
int n=s.length();
String max="";
char [] str=s.toCharArray();
for(int i=0;i<n;i++){
String c=hw1(str,s,i,i);
String d=hw1(str,s,i,i+1);
if(max.length()<c.length()){
max=c;
}
if(max.length()<d.length()){
max=d;
}
}
return max;
}
public static String hw1(char[] str,String s,int a,int b){
int left=a;
int right=b;
while(left>=0 &&right<s.length()){
if(str[left]==str[right]){
left--;
right++;
}else{
break;
}
}
//因为此时后出来的lef
return s.substring(left+1,right);
}
}
总结
感觉java的方法要熟练,基础真的非常重要