注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

时间记录器

记录我的Linux、Android学习之路

 
 
 

日志

 
 

查找最长回文字符串 – 内缩法  

2012-09-10 21:02:12|  分类: C语言相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

#include <stdio.h>

#include <string.h>

 

void find(char in[], int len, char out[])

{

    int i=0, j=0, cnt = 0, maxLen = 0, m=0;

 

    for(i = 0; i < len; i++)

    {//遍历每个元素,作为左起点

        for(j = 0; j < len-1-i; j++)

        {//从最右元素向左遍历

            if(in[i] == in[len-1-j])

            {//回文的两端如果相等,则进一步进行循环比较

                for(cnt = 1; cnt <= (len-i-j)/2; cnt++)

                {//比较左起点和右起点之间的长度len-i-j的一半就可以了

                    if(in[i+cnt] != in[len-1-j-cnt]) //内缩比较

                        break;

                }

                if(cnt >= (len-j-i)/2)

                {//判断上面的内缩比较是否过半,过半则必定回文

                    cnt = (len-j-i);//cnt在这里作为本次长度使用

                    if(cnt > maxLen)//比原来的大才更新

                    {

                        for(m = 0; m < cnt; m++)

                        {//拷贝到输出数组

                            out[m] = in[i+m];

                        }

                        maxLen = cnt;

                    }

                    break;

                }

            }

        }

    }

 

}

int main()

{

    char input[]="abcdcbaf123454321qqq" ;

    int len = strlen(input);

    char output[200]={0};

 

    printf("input:%s\n",input);

    find(input, len, output);

    printf("%s\n",output);

 

    return 0;

}

  评论这张
 
阅读(770)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017