给定一个字符串,用java代码找出其中不含有重复字符的最长子串的长度

public int lengthOfLongestSubstring(String s) {
    int n = s.length(), ans = 0;
    Map<Character, Integer> map = new HashMap<>();
    for (int i = 0, j = 0; j < n; j++) {
        if (map.containsKey(s.charAt(j))) {
            i = Math.max(map.get(s.charAt(j)), i);
        }
        ans = Math.max(ans, j - i + 1);
        map.put(s.charAt(j), j + 1);
    }
    return ans;
}

  1. 定义两个指针 i 和 j,分别表示子串的左右边界
  2. 使用一个哈希表来记录每个字符最后一次出现的位置
  3. 不断移动右指针 j,同时更新左指针 i 的位置,直到找到一个不含有重复字符的子串为止
  4. 在这个过程中,使用哈希表来快速判断是否有重复字符
  5. 最后返回最长子串的长度。
    这段代码的时间复杂度为 O(n),其中 n 是字符串的长度。
posted @ 2023-05-15 19:36  18sui  阅读(214)  评论(0)    收藏  举报