算法-不含有重复字符的 最长子串 的长度

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

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

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

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

 

// "pwwkew"
public static int lengthOfLongestSubstring(char[] chars) {
    // 要进行分步解析 1、char[]总共的长度是 pwwkew
    int size, i = 0, j, k, max = 0;
    // size=6 总共要循环6次
    size = chars.length;
    // 第一次 size=6 j=0 k=0 max=0
    for (j = 0; j < size; j++) {
        // 第一次 k=i=0 j=0 直接走下面的if
        // 第二次 k=i=0 j=1 进入循环
        // 第三次 k=i=0 j=2 进入循环
        // 第四次 k=i=2 j=3 直接走下面的if
        // 第五次 k=i=2 j=4 进入循环
        for (k = i; k < j; k++) {
            //  第二次 chars[0]=p==chars[1]=w false 直接跳过
            //  第三次 chars[0]=p==chars[2]=w false 直接跳过 chars[1]=w==chars[2]=w true 进入
            //  第四次 chars[2]=w==chars[3]=k false 直接跳过
            //  第五次 chars[2]=w==chars[4]=e false 直接跳过 chars[3]=k==chars[4]=e 直接跳过
            if (chars[k] == chars[j]) {
                //  第三次 i=2
                i = k + 1;
                break;
            }
        }
        // 第一次 j=i=0 max=0
        // 第二次 j=1 i=0 > max=1
        // 第三次 j=2 i=0 max =1
        // 第四次 j=3 i=2 max =2 直接跳过
        // 第五次 j=4 i=2 max =2 进入
        if (j - i + 1 > max) {
            // 第一次 max=1
            // 第二次 max=2
            // 第三次 j=3 i=2 max =2
            // 第五次 j=4 i=2 max =3
            max = j - i + 1;
        }
    }
    return max;
}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值