leetcode: Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

思路

一看这道题,差点被它举得例子给带坏了,以为这个字符串是从第一个字母开始的,就觉得没什么难的嘛,难道又是有什么高端的牛逼的简练的算法?后来与室友讨论了一下,恍然大悟,原来是这个子字符串是可以不同第一个字母开始的(读题很重要啊 敲打),瞬间就觉得貌似不太好做了。可是,高端的室友又提醒了我一下,以前写过一个找回文的题。当时用的是动态规划,也就是后面的计算使用前面的结果,瞬间我就知道怎么写了。今天下午把它写出来了。

简而言之就是,先看长度为1的子字符串是不是每个字母都不重复,然后看长度为2的,而在看长度为2的时候。这样在看长度为k的子字符串的时候,不要再一个一个的比了看是不是没有重复的字母了,而是结合前面长度为k-1的子字符串,也就是说先看后k-1个字母是不是有重复的字母(这个可以看之前计算过的结果),然后在看第一个字母在是不是在剩下的k-1个字母中出现过。这样就是思路,提交了之后一次性通过。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
		vector<bool> status(s.length(),true);
		for(int l=1;l<s.length();l++){
			bool res=false;
			for(int i=0;i+l<s.length();i++){
				string tmp=s.substr(i+1,l);
				if(status[i+1]){
					if(inStr(s[i],tmp))
						status[i]=false;
				}else{
					status[i]=false;
				}
				res = res || status[i];
			}
			if(!res) return l;
		}
		return s.length();
    }

	bool inStr(char c,string str){
		for(int i=0;i<str.length();i++){
			if(c==str[i])
				return true;
		}
		return false;
	}
};


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值