【LeetCode】3.无重复字符的最长子串 结题报告 (C++)

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串

一、解题思路:(蛮力法)

(1)两个for循环,外层循环用来遍历整个数组(变量 r ),内层循环(变量 i )用来遍历子串即 i 与 j 之间的字符串

(3)只要当外层循环的条件不满足时,程序就退出,不论子串中还是否有重复值

(4)用变量 tmp 表示子串之间无重复的最长子序列的长度,tmp = r - i ,l = i +1 ,max表示无重复的最长子序列长度

(5)当每次 i 与 r 对应的字符相等的时候就要比较 tmp 与 max ,找出当前的无重复最长子序列的长度

(6)当 i 与 r 对应的字符相等的时候,接下来就要判断它俩的值是否相等,如果相等就代表目前的子序列中无重复值,tmp++,如果不相等,就说明重复值了,那么此时的 l 也就是 i 的初始位置要向后走一个了,此时字串中的无重复序列的长度tmp = r - i;

class Solution {
public:
    int lengthOfLongestSubstring(string s)
	{
          int max = 0;
          int tmp = 0;
          int l, r, i;
          int N = s.size();
    for (l = 0, r = 0; r <= N; r++) 
     {
        for (i = l; i <= r; i++) 
	{
            if (s[i] == s[r])
            {
                if (tmp > max)   
		max = tmp;
                break;
            }
        }
        if (i == r)   
	    tmp++;
	else 
	{
            l = i + 1;tmp = r - i;
         }
    }
    return max;
    }
};
int main()
{
	Solution s1;
	Solution s2 ;
	Solution s3 ;
	
	cout<<"length1 = "<<s1.lengthOfLongestSubstring("abcdec")<<endl;

	cout<<"length2 = "<<s2.lengthOfLongestSubstring("bbbbbb")<<endl;

	cout<<"length3 = "<<s3.lengthOfLongestSubstring("pwwke")<<endl;

	return 0;
}

未完,待续

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值