3-Longest Substring Without Repeating Characters--朴素解法

      首先申明,这是一种非常非常非常朴素的方法。。。。。 
int lengthOfLongestSubstring(char* s){
    int len=strlen(s);
    int max=-1;
    int tmp=0;
    if(len==0){
        return 0;
    }
    for(int i=0;i<len;i++){				//作用是统计每个字符所能够实现的最大子字符串长度 
		tmp=1;							//计算下一个字符的时候把临时的长度记为1 
		int j=i+1;						//都是从i后面的字符开始对比的 
		int repeat=0;					
		while(j<len&&repeat==0){		 
			int k=i;
			while(k<j){					//就是从j开始的字符不能和从i~j-1的任何字符相同 
				if(s[k]!=s[j]){		 
					k++;
				}else{
					repeat=1;
					break;
				}
			}
			if(k==j){					//假设从j开始的字符不和从i~j-1的任何字符相同,那么此时的k和j是相同的 
				tmp++;
				j++;
			} 
		}
		max=max>tmp?max:tmp;
	} 
	return max;

} 

    想法很天真,很简单,因为我实在想不到还能用别的什么方法来求这个解了。脑子里貌似冒出了一些些滑动窗口的概念,但是没有深入的了解过,去solution区里看有用到哈希表什么的,不明觉厉,不管了,就先把我的想法写出来吧,之后再进行针对性的改进好了。

    我的想法就是我考虑到有这样一种情况:在字符串的前面几个字符构成了子字符串,长度为3,往后又构成一个子字符串,长度为5,那最后长度肯定是5啊。针对这种情况,我就像不管三七二十一,把每个字符所能得到的子字符串的长度都求出来,然后比大小就可以了。这也就是为什么会有for循环。

    然后接下来的问题就是,在求每一个字符所能够达到的子字符串长度的时候,我们是通过看第i个字符是否和后面的字符相同,但是如果出现有两个不和第i个字符相同,但是它们两相同的情形,碰到这样的也要停止计数了。

    解决方法就是把每个字符都与从第i个字符到那个字符比较,看是否相同。

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值