5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
这个题不难,基本思想就是选定一位k然后朝两边扩散。
两个for循环,第一个是当前为作为中心点扩散,第二个是当前位和下一个作为中心点,即最终字符串位偶数。
要注意的数list转化为字符串。因为C语言还要处理数组,所以我直接用java写,list就直接成型了,要不然C语言还要将数组来回复制,唉,太懒了,罪过。
class Solution {
public String longestPalindrome(String s) {
if(s.length()==1){
return s;
}
if(s.length()==0){
return "";
}
StringBuilder sb = new StringBuilder();
String resultString = "";
String str= new String();
String str1 = new String();
LinkedList<Character> list = new LinkedList();
ArrayList<Character> obj = new ArrayList(10000);
int len =s.length();
int i=0,j=0,k;
int num,max=1;
obj.add(s.charAt(0));
for(k=0;k< len;k++){
//以k为中心扩散
i=k-1;
j=k+1;
num=1;
list.clear();
list.add(s.charAt(k));
while(i>=0&&j<len){
if(s.charAt(i)==s.charAt(j)){
list.addFirst(s.charAt(i));
list.add(s.charAt(i));
i--;
j++;
num+=2;
if(num>max){
obj.clear();
max=num;
obj.addAll(list);
}
}else{
break;
}
}
i=k;
j=k+1;
num=0;
list.clear();
while(i>=0&&j<len){
if(s.charAt(i)==s.charAt(j)){
num+=2;
list.addFirst(s.charAt(i));
list.add(s.charAt(j));
i--;j++;
if(num>max){
max=num;
obj.clear();
obj.addAll(list);
}
}else{
break;
}
}
}
for(i=0;i<obj.size();i++){
if(i<list.size()-1){
sb.append(obj.get(i));
sb.append(",");
}else{
sb.append(obj.get(i));
}
}
resultString = sb.toString();
return sb.toString();
}
}