美文网首页LeetCode 解题
LeetCode-3. 无重复字符的最长子串 Java & Go

LeetCode-3. 无重复字符的最长子串 Java & Go

作者: Arrows | 来源:发表于2019-05-13 15:53 被阅读0次

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

示例 1:

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

示例 2:

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

示例 3:

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

解答:

3.无重复字符的最长字串.png

Java


public class Solution {

    public int lengthOfLongestSubstring(String s) {
        if( s.length() == 0) {
            return 0;
        }
        int max = 1 , cur = 0;
        for (int i = 1; i < s.length(); i++) {
            int j = cur;
            // 检测窗口内是否有重复字符
            while (j < i){
                if (s.charAt(j) == s.charAt(i)) break;
                j++;
            }
            // 如果窗口内无重复字符,扩大窗口
            if(i == j){
                max = Math.max((j - cur + 1), max);
            }else{ // 滑动窗口
                cur = j + 1;
            }
        }
        return max;
    }

}

Go

func lengthOfLongestSubstring(s string) int {
    if len(s) == 0 {
        return 0
    }
    cur, max := 0, 1
    array := []rune(s)
    for x, v:= range array{
        y := cur
        for x > y {
            if array[y] == v {
                break
            }
            y++
        }
        if x == y {
            newMax := x - cur + 1
            if newMax > max {
                max = newMax
            }
        } else {
            cur = y + 1
        }
    }
    return max
}

上一题:2. 两数相加 Java & Go

相关文章

网友评论

    本文标题:LeetCode-3. 无重复字符的最长子串 Java & Go

    本文链接:https://www.haomeiwen.com/subject/jzqraqtx.html