leetcode:Longest Palindromic Substring
来源:互联网 发布:damn it 编辑:程序博客网 时间:2024/06/05 20:00
回文数
用core[i]表示以i为"核"的最长回文序列
core1[i]是单核回文,例如bacab,是以c为单核
core2[i]是双核回文,例如baccab,是以cc为双核。
代码写得比较冗长,思想就是,当前回文序列为s[i,j],那么只需要看s[i-1]==s[j+1]即可。
边界考虑:s=“a”时,core2无效。
public class Solution {
public String longestPalindrome(String s) {
char[] ca=s.toCharArray();
int n=ca.length;
int[] core1=new int[n];
int[] core2=new int[n];
int[] flag1=new int[n];
int[] flag2=new int[n];
int i,f,len1,len2;
//bab
for(i=0;i<n;i++)
{
core1[i]=0;
flag1[i]=1;
}
f=1;len1=0;
while(f!=0)
{
f=0;
for(i=0;i<n;i++)
{
if(flag1[i]==0)
continue;
core1[i]++;
if(i-core1[i]>=0 && i+core1[i]<n && ca[i-core1[i]]==ca[i+core1[i]])
flag1[i]=1;
else
flag1[i]=0;
f+=flag1[i];
}
len1++;
}
//baab
for(i=0;i<n-1;i++)
{
core2[i]=0;
if(ca[i]==ca[i+1])
flag2[i]=1;
else
flag2[i]=0;
}
f=1;len2=0;
while(f!=0)
{
f=0;
for(i=0;i<n;i++)
{
if(flag2[i]==0)
continue;
core2[i]++;
if(i-core2[i]>=0 && i+core2[i]+1<n && ca[i-core2[i]]==ca[i+core2[i]+1])
flag2[i]=1;
else
flag2[i]=0;
f+=flag2[i];
}
len2++;
}
//fidsubtring
if((len1*2-1)>len2*2 || n==1)
{
for(i=0;i<n;i++)
{
if(core1[i]==len1)
break;
}
return s.substring(i-(len1-1),i+len1);
}
else
{
for(i=0;i<n-1;i++)
{
if(core2[i]==len2)
break;
}
return s.substring(i-(len2-1),i+1+len2);
}
}
}
- LeetCode: Longest Palindromic Substring
- LeetCode Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [Leetcode] Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Leetcode : Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- LeetCode-Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Longest Palindromic Substring leetcode
- LeetCode Longest Palindromic Substring
- LeetCode - Longest Palindromic Substring
- LeetCode -- Longest Palindromic Substring
- LeetCode | Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- 在LoadRunner中使用windows socket协议
- 4个方向的手势 操作
- AdaBoost人脸检测原理
- poj 2376 最小区间覆盖问题
- Shiro认证框架下,加入图形验证码
- leetcode:Longest Palindromic Substring
- android_launcher的源码详细分析
- hive-学习笔记
- vs2012 cpp与lua的hello world
- android的优缺点
- 【matlab】频域滤波函数lpfilter
- YII使用ckeditor的方法
- android 增量更新之客户端
- 写在这一天