zoukankan      html  css  js  c++  java
  • 回文字串的问题

    //输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串中连续出现的字符片段。回文的含义是:正着看和倒着看相同,如abba和yyxyy。
    //在判断时,应该忽略所有的标点和空格,且忽略大小写,但输出应该保留原样(在回文串的首部和尾部不要输出多余字符)。输出字符串长度不超
    //过5000,且占据单独的一行。应该输出最长的回文串,如有多个,输出的起始位置靠左的。
    //样例输入:Confuciuss say: Madam, I'm Adam.
    //样例输出:Madam, I'm Adam
    ///////////////////////////////////////////////////////////////////////////////////////////
    #if 0
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    #define MAXN 5000
    
    char buf[MAXN],s[MAXN];
    
    int main(void)
    {
    	int n, m = 0,max = 0;
    	int i,j,k;
    	fgets(buf,sizeof(s),stdin);
    	n = strlen(buf);
    	for(i = 0; i <= n; i++)
    	{
    		if(isalpha(buf[i]))
    		{
    			s[m++] = toupper(buf[i]);
    		}
    	}
    	for(i = 0; i < m; i++)
    	{
    		for(j = i; j < m; j++)
    		{
    			int ok = 1;
    			for(k = i; k <= j; k++)
    			{
    				if(s[k] != s[i+j-k])
    				{
    					ok = 0;
    				}
    			}
    			if(ok && j-i+1 > max)
    			{
    				max = j-i+1;
    			}
    		}
    	}
    	printf("max = %d\n",max);
    
    	return 0;
    }
    #endif
    
    #if 1
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    #define MAXN 5000
    
    char buf[MAXN],s[MAXN];
    int p[MAXN];
    int main(void)
    {
    	int n,m = 0,max = 0,x,y;
    	int i,j;
    	fgets(buf,sizeof(s),stdin);
    	n = strlen(buf);
    	for(i = 0; i < n; i++)
    	{
    		if(isalpha(buf[i]))
    		{
    			p[m] = i;
    			s[m++] = toupper(buf[i]);
    		}
    	}
    	for(i = 0; i < m; i++)
    	{
    		for(j = 0; i-j >=0 && i+j < m; j++)
    		{
    			if(s[i-j] != s[i+j])
    			{
    				break;
    			}
    			if(j*2+1 > max)
    			{
    				max = j*2+1;
    				x = p[i-j];
    				y = p[i+j];
    			}
    		}
    		for(j = 0; i-j >= 0 && i+j+1 <m; j++)
    		{
    			if(s[i-j] != s[i+j+1])
    			{
    				break;
    			}
    			if(j*2+2 > max)
    			{
    				max = j*2+2;
    				x = p[i-j];
    				y = p[i+j+1];
    			}
    		}
    	}
    	for(i = x; i <= y; i++)
    	{
    		printf("%c",buf[i]);
    	}
    	printf("\n");
    
    	return 0;
    }
    
    #endif
    

      

  • 相关阅读:
    python学习2(转载)
    python学习1
    第三方授权登录
    新浪微博开发者平台应用申请及配置说明
    新浪微博登录第三方网站实现原理是什么?
    Redis中PipeLine使用
    发送短信验证码的功能开发
    Python celery原理及运行流程
    设置django缓存+验证码图片接口
    编写注册接口
  • 原文地址:https://www.cnblogs.com/tslDream/p/4454468.html
Copyright © 2011-2022 走看看