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

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

示例 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。