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

题目链接:力扣

解题思路:

遍历字符串,使用left变量保存无重复最长子串的开始位置,max保存最长子串的长度,使用lastIndex数组保存当前正在遍历的字符上一次出现的位置,如果上一次出现的位置大于等于left,明显有重复,更新left为当前字符上一次出现的位置+1,否则没有重复,更新max。这种方式可以在O(n)的时间复杂度求解。

AC代码:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int[] lastIndex = new int[128];
        Arrays.fill(lastIndex, -1);
        int left = 0;
        int max = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (lastIndex[c] >= left) {
                left = lastIndex[c] + 1;
            } else {
                max = Math.max(max, i - left + 1);
            }
            lastIndex[c] = i;
        }
        return max;
    }
}

你可能感兴趣的:(LeetCode_Java版,数据结构,leetcode,算法,java)