1430: 等值子串(串)

  • 题目描述

    如果字符串的一个子串(其长度大于1)的各个字符均相同,则称之为等值子串。试设计一算法,输入字符串S,以“!”作为结束标志。如果串S中不存在等值子串,则输出信息“无等值子串”,否则求出(输出)一个长度最大的等值子串。

    输入格式

    输入字符串s

    输出格式

    找出其中长度最大的等值子串

    样例输入content_copy

    asdf123!

    样例输出content_copy

    无等值子串
  • 见代码:
  • #include<stdio.h>
    
    int main()
    {
    	int s[1000]={0};   //记录字符串的ASCII值 
    	char str[1000]=""; //录入字符 
    	char ch;
    	scanf("%c",&ch);
    	str[0] = ch;
    	int x = ch-'0';
    	s[0] = x;
    	int y = 1;
    	int max = 1; 
    	while(ch!='!')
    	{
    		scanf("%c",&ch);
    		str[y] = ch;
    		x = ch-'0';
    		s[y++] = x;
    	}
    	int p,q;
    	for(int i = 0;i<y;i++)
    	{
    		int cnt = 1;
    		if(s[i]==s[i+1]) //如果前后ASCII值相等就再一层循环 
    		{
    			p = i; //记录等值子串的位置 
    			int j = i+1;
    			cnt++;
    			for(j = i+1;j<y;j++)
    			{
    				if(s[j]==s[j+1])
    					cnt++;
    				else
    					break;
    			}
    			i = j;  
    		}
    		if(max<cnt) //如果目前最大值小于cnt 
    		{
    			max = cnt; //更换最大值 
    			q = p; //更换最大值对应等值子串位置 
    		}
    	}
    	if(max<=1)
    		printf("无等值子串\n");
    	else
    	{
    		for(int i = q;i<q+max;i++)
    			printf("%c",str[i]);  //输出 
    	}
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烂尾歌·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值