最长子字符串 Longest Substring Without Repeating Characters

Description: Given a string, find the length of the longest substring without repeating characters.

给一个字符串, 找到该字符串最长无重复子字符串的长度. 

Solution: 

class Solution {
    public int lengthOfLongestSubstring(String str) {
        if (str == null && ("").equals(str)) {
            return 0;
        }
        char[] chars = str.toCharArray();
        int[] map = new int[256];
        for (int i = 0; i < 256; i++) {
            map[i] = -1;
        }
        int len = 0;
        // 当前str[i]下, 最长无重复子字符串开始的前一个位置
        int pre = -1;
        int cur = 0;
        for (int i = 0; i != chars.length; i++) {
            pre = Math.max(pre, map[chars[i]]);
            cur = i - pre;
            len = Math.max(cur, len);
            map[chars[i]] = i;
        }
        return len;
    }
}

  

所给字符串长度为N, 字符编码范围为M, 则该方法时间复杂度为O(N), 额外空间复杂度为O(M).

posted @ 2018-12-11 23:37  江湖夜雨Fan  阅读(72)  评论(0)    收藏  举报