最长回文串

最长回文串,第1张

最长回文串

#include   
char qdu[100050];   
int manacher(char *str)      
{                   
    int i;          
    int res = 0;    
    for(i = 1;i<=strlen(str)-1;i++)
    {               
        int l = i;  
        int r = i;  
        while(str[i] == str[r+1]){ //以中心扩展,如果中心值abbba相等,那么当判断到第一个b的时候可以拓展到第三个b
            r++;    
            i = r;  
            }
        while(str[l-1] == str[r+1]) //向两侧扩展,找最大。
            {                       
             r++;
             l--;
            }           
        if(res < r-l+1) {//更新最大值
            res = r-l+1;
        }
    }
    return res;
}

int main()
{
        int loop;
        qdu[0] = '$';
//         gets(qdu+1);
    while(gets(qdu+1));
        printf("%dn",manacher(qdu));
 
    return 0;
}
 
 

#include
#include


int IsPalindrome(char *s, int begin, int end);

int main(void) 
{
    char pwdStr[10000];
    while(scanf("%s", pwdStr) != EOF)
    {
        int len = 1;
        for(int i = 0; pwdStr[i] != ''; i++)
        {
            for (int j = 0; pwdStr[i + j] != ''; j++)
            {
                if (IsPalindrome(pwdStr, i, i + j)) 
                { 
                    if (len < (j + 1))
                    {
                        len = j + 1;
                    }
                }
            }
            if (len >= (strlen(pwdStr) - i)) { break; }
        }
        printf("%dn", len);
    }
    return 0;
}

int IsPalindrome(char *s, int begin, int end)
{
    int i_begin = begin;
    int i_end = end;
    while(i_begin <= i_end)
    {
        if (s[i_begin++] != s[i_end--]) { return 0; }
    }
    return 1;
}

#include        //正确的代码

int main()
{
        int loop;
    char qdu[100050];  
          qdu[0] = '$';
        while(gets(qdu+1)){
        int res = 0;    
    for(int i = 1;i     {               
        int l = i;   int r=i; 
          
        while(qdu[i] == qdu[r+1]){//以中心扩展,如果中心值abbba相等,那么当判断到第一个b的时候可以拓展到第三个b
            r++;   i++;                    
        }
        
        while(qdu[l-1] == qdu[r+1]) //向两侧扩展,找最大。
            {                       
             r++;  l--;
            }           
        
        if(res < r-l+1) {//更新最大值
            res = r-l+1;
          }
    }
            printf("%dn",res);
        }
    return 0;
}
   
          


// {
//         int loop;
//     char qdu[100050];  
// //         qdu[0] = '$';
//         while(gets(qdu)){
//         int res = 0;    
//     for(int i = 1;i //     {               
//         int l = i;  
//         int r = i;  
//         while(qdu[i] == qdu[r+1]){//以中心扩展,如果中心值abbba相等,那么当判断到第一个b的时候可以拓展到第三个b
//             r++;    
//             i = r;       
//         }
//         while(qdu[l-1] == qdu[r+1]) //向两侧扩展,找最大。
//             {                       
//              r++;
//              l--;
//             }           
//         if(res < r-l+1) {//更新最大值
//             res = r-l+1;
//           }
//     }
//             printf("%dn",res);
//         }
//     return 0;
// }
   
          
   

#include   
  

int main()
{
        int loop;
    char qdu[100050];  
//         qdu[0] = '$';
        while(gets(qdu )){
        int res = 0;    
    for(int i = 0;i     {               
        int l = i;  
          
        while(qdu[i] == qdu[i+1]){//以中心扩展,如果中心值abbba相等,那么当判断到第一个b的时候可以拓展到第三个b
            i++;    
                 
        }
        while(qdu[l-1] == qdu[i+1]) //向两侧扩展,找最大。
            {                       
             i++;
             l--;
            }           
        if(res < i-l+1) {//更新最大值
            res = i-l+1;
          }
    }
            printf("%dn",res);
        }
    return 0;
}
   
          

    马拉车算法(易理解版)_GameRoad-CSDN博客

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5636164.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存