计蒜客 最长不重复子串问题

问题描述:

给定一个字符串,找到最长的子串,要求该子串中没有重复的字符。

例如:

字符串abcabcbb的不含重复字符的 最长 子串为abc,长度为 3。

而bbbbbb的不含重复字符的 最长 子串为b,长度为 1。

输入格式

输入包含多行,每一行对应一个长度不超过 100 的输出,直到遇到结束符为止。每行依次输入字符串s。

输出格式

输出不含重复字符的 最长 子串的长度。

样例输入

hchzvfrkmlnozjk

样例输出

11

C++语言代码:

#include <cstring>
#include <iostream>
using namespace std;
int main()
{
    char a[1000];
    int b[1000];
    while(cin>>a)
    {
        int len=strlen(a);  //计算字符数组的长度利用strlen()时需要加上头文件<cstring>
        int i,j;
        int max=1;
        for(i=0;i<len;i++)
        {
            int z=0;//每当重新进行扫描时,都要将计数变量z清零,用于重新计数
            memset(b,0,sizeof(b));//memset(b,0,sizeof(b))函数是将数组a中的所有元素都初始化为0
            for(j=i;j<=len;j++)
            {
                int x=a[j];//将输入到char a数组中的第一个字符所对应的ASCII的值赋给变量x
                b[x]++;//将变量对应的ASCII值当做数组a的下标,每个下标对应的值都是在memset函数中初始为了0
                if(max<z) max=z;//用来进行计数的变量
                if(b[x]>1) { break;}//当同一个下标对应的数组值大于1时,就说明遇到有重复的字符出现,此时退出循环,重新开始计数。
                z++;
            }
        }
        cout<<max<<endl;
    }
}

C语言代码

#include<stdio.h>  
#include<string.h>   
char a[125];  
int b[125];  
int main()  
{  
    while(scanf("%s",a)!=EOF)  
    {  
        int len=strlen(a);  
        int i,j;  
        int max=-1;  
        for(i=0;i<len;i++)  
        {      
            memset(b,0,sizeof(b));  
            b[a[i]-'0']=1;  
            for(j=i+1;j<len;j++)  
            {  
               if(b[a[j]-'0']==0)  
                {  
                  b[a[j]-'0']=1;   
                }  
               else  
                break;  
            }  
            if(max<j-i)  
            max=j-i;  
        }  
        printf("%d\n",max);   
    }     
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值