• 回文字串的问题


    //输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串中连续出现的字符片段。回文的含义是:正着看和倒着看相同,如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
    

      

  • 相关阅读:
    BottomNavigationBarItem fixed
    Flutter进阶—点击、拖动和其他手势
    semaphore demo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
    微信小程序
    Socket套接字 =======================
    socket
    flutter packages.
    安卓抓包https
    Flutter 输入控件TextField设置内容并保持光标(cursor)在末尾
    textfield reload issue and other things reload problem.===================================
  • 原文地址:https://www.cnblogs.com/tslDream/p/4454468.html
Copyright © 2020-2023  润新知