最大字符平台【C语言】

最大字符平台【C语言】

题目:

__对于一个顺序串S,输出其最大字符平台起始位置所包含的字符
注意:最大字符平台有可能不止一个
例如:
字符串:aabcbbbbdccccaaa
最大字符平台为:bbbb、cccc
__

时间复杂度为任意空间复杂度为仁矣
代码:
/*3-6*/
#include <stdio.h>
#include <stdlib.h>
#define size 100
int a[size];
int b[size];
int t=0;
typedef struct
{
    char ch[size];
    int len;
}Seqstring;
void create(Seqstring *s)
{
    int i;
    for(i=0;i<s->len;i++)
    {
        scanf(" %c",&s->ch[i]);
    }
}
void char_platform(Seqstring *s)
{
    int i=0;
    a[t]=1;
    b[t]=1;
    while(1)
    {
        b[t]=1;
        while(s->ch[i]==s->ch[i+1])
        {
            b[t]=b[t]+1;
            i++;
        }
        int ans=a[t]+b[t];
        if(ans > s->len)
        {
            return;
        }
        else if(ans <= s->len)
        {
            a[t+1]=a[t]+b[t];
            t++;
            i++;
        };
    }
}
int MAX(int a,int b)
{
    return a>b?a:b;
}
void view_platform(Seqstring *s)
{
    int i=0;
    int maxn=0;
    while(i<=t)
    {
        maxn=MAX(b[i],maxn);
        i++;
    }
    int temp=0;
    while(temp<=t)
    {
        if(b[temp]==maxn)
        {
            int j=0;
            while(j<maxn)
            {
                printf("%c",s->ch[a[temp]-1]);
                j++;
            }
            printf("\n");
        }
        temp++;
    }
}
void view(Seqstring *s)
{
    printf("该顺序串的长度为:%d\n",s->len);
    printf("该顺序串为:");
    if(s->len==0)
    {
        printf("NULL");
        return;
    }
    int i;
    for(i=0;i<s->len;i++)
    {
        printf("%c",s->ch[i]);
    }
    printf("\n");
}
int main()
{
    printf("请您输入--顺序串的长度:\n");
    int num;
    scanf("%d",&num);
    Seqstring s;
    s.len=num;
    printf("请您输入--顺序串:\n");
    create(&s);
    view(&s);
    char_platform(&s);
    printf("该顺序串的字符平台为:\n");
    view_platform(&s);
    return 0;
}

运行情况:
请您输入--顺序串的长度:
16
请您输入--顺序串:
aabcbbbbdccccaaa
该顺序串的长度为:16
该顺序串为:aabcbbbbdccccaaa
该顺序串的字符平台为:
bbbb
cccc
Program ended with exit code: 0
Copyright © 2019 wyq. All rights reserved.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值