题解 | #最长回文子串#

最长回文子串

https://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507

不懂怎样才能写出时间复杂度为O(n),我只能写O(n^2)
#include <stdio.h>
#include <string.h>

int main(){
    char s[350]={0};
    scanf("%s",s);
    int slen=strlen(s),max=1,j,k,len=0;
    for(int i=0;i<slen;i++){
        if(s[i]!=s[i+1] || s[i-1]==s[i+1]){//奇对称
            j=i-1,k=i+1;
            while(j>-1 && k<slen){//以该数为中心向两端查找
                if(s[j]==s[k]){
                    len=k-j+1;
                    j--;
                    k++;
                    if(len>max){
                        max=len;
                    }
                }
                else{
                    len=0;
                    break;
                }
            }
        }
        if(s[i]==s[i+1]){//偶对称
            j=i-1,k=i+2;
            if(max<2){
                max=2;
            }
            while(j>-1 && k<slen){//以该数为中心向两端查找
                if(s[j]==s[k]){
                    len=k-j+1;
                    j--;
                    k++;
                    if(len>max){
                        max=len;
                    }
                }
                else{
                    len=0;
                    break;
                }
            }
        }
    }
    printf("%d",max);
}

全部评论

相关推荐

qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
抱抱碍事梨a:三点建议,第一点是建议再做一个项目,把自我介绍部分顶了,第二点是中南大学加黑加粗,第三点是建议加v详细交流
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务