列表

详情


HJ92. 在字符串中找出连续最长的数字串

描述

输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)
本题含有多组样例输入。

数据范围:字符串长度 , 保证每组输入都至少含有一个数字

输入描述

输入一个字符串。1<=len(字符串)<=200

输出描述

输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不要输出空格)。

示例1

输入:

abcd12345ed125ss123058789
a8a72a6a5yy98y65ee1r2

输出:

123058789,9
729865,2

说明:

样例一最长的数字子串为123058789,长度为9 样例二最长的数字子串有72,98,65,长度都为2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2020-07-07

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
 
int main()
{
    char str[1000]={'\0'};
    while(scanf("%s",str) != EOF)
    {
        int len=strlen(str);
        int num=0,max=0;
        int arr[100]={0};
        int brr[100]={0};
        int k=0;
        int ii=0;
        for(ii=0;ii<len;ii++)
        {
            if(str[ii]>='0'&&str[ii]<='9')
                num++;
            else
            {
                if(num>=max && num>0)
                {
                    max=num;
                    arr[k]=ii-max;
                    brr[k]=max;
                    k++;
                }
                num = 0;
            }
        }
        if(num)
        {
            if(num>=max)
            {
                max=num;
                arr[k]=ii-max;
                brr[k]=max;
                k++;
            }
        }
        if(max==0)
        {
            printf("\n");
            continue;
        }
        int flag=0;
        for(int i=0;i<k;i++)
        {
            if(brr[i]==max)
            {
                for(int j=arr[i];j<arr[i]+max;j++)
                    printf("%c",str[j]);
            }
             
        }
        printf(",%d\n",max);
    }
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 256KB, 提交时间: 2020-07-07

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define LEN    100
int record[LEN] = {0};

int main()
{
    int len, curlen, i, j;
    char buf[LEN] = {0};
    
    while (scanf("%s", buf+1) != EOF)
    {
		buf[0] = '*';
        len = curlen = j = 0;
        for (i=strlen(buf); i>=0; i--)
        {
            if (isdigit(buf[i]))
            {
                curlen++;
            }
            else
            {
                if (curlen > len)
                {
                    len = curlen;
                    record[0] = i+1;
					j = 1;
				}
                else if (curlen==len && len>0)
                {
                    record[j++] = i+1;
				}
				curlen = 0;
            }
        }
		
        while(j--)
        {
            
            for (i=0; i<len; i++)
                printf("%c", buf[record[j]+i]);
        }
        printf(",%d\n", len);
    }
    return 0;
}

上一题