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

Evernote Export

题目

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

示例:

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

思考

  • 正向思维
    • 若要确定最长子串,则需确定初始位置i,结束位置j
    • 如何在ij这个长度内保证不含重复字符呢? 这就需要映射了,本来我打算使用map,可是这个区间窗口是会变化的,map删除元素时有点儿麻烦。于是,考虑数组a,索引保留字符值,数组的值等于这个字符当前的位置
    • 接下来,就是确定这个区间窗口如何变化?初始位置 i 受后来j的加入的影响,如果j加入后的字符,在数组 a的位置比原来的大,那就说明存在重复的字符了,更新这个i到重复的位置。

注意:

  • 字符串包括ASCII字符表内所有的字符,注意数组a初始化的范围。
  • 由于字符串的长度可能为1,将初始位置 i 初始化为1就行,这样,j = 0时,j-i= 1。
  • 为了保留原来不存在重复字符时, i 的位置不受影响,需要将数组a的所有值初始化为1.

题解

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int i = -1;
        int res = 0;
        int[] a = new int[128]; 
        Arrays.fill(a, -1);
        for(int j = 0; j < s.length(); j ++) {
            i = Math.max(i, a[s.charAt(j)]);
            int cur = j - i;
            res = Math.max(res, cur);
            a[s.charAt(j)] = j;
        }
        // System.out.println(Arrays.toString(a));
        return res;
    }
}
%23%23%23%23%20%E9%A2%98%E7%9B%AE%0A%3E%E7%BB%99%E5%AE%9A%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%8C%E8%AF%B7%E4%BD%A0%E6%89%BE%E5%87%BA%E5%85%B6%E4%B8%AD%60%E4%B8%8D%E5%90%AB%E6%9C%89%E9%87%8D%E5%A4%8D%E5%AD%97%E7%AC%A6%60%E7%9A%84%C2%A0%60%E6%9C%80%E9%95%BF%E5%AD%90%E4%B8%B2%60%C2%A0%E7%9A%84%E9%95%BF%E5%BA%A6%E3%80%82%0A%0A**%E7%A4%BA%E4%BE%8B**%3A%0A%60%60%60%0A%E8%BE%93%E5%85%A5%3A%20%22abcabcbb%22%0A%E8%BE%93%E5%87%BA%3A%203%20%0A%E8%A7%A3%E9%87%8A%3A%20%E5%9B%A0%E4%B8%BA%E6%97%A0%E9%87%8D%E5%A4%8D%E5%AD%97%E7%AC%A6%E7%9A%84%E6%9C%80%E9%95%BF%E5%AD%90%E4%B8%B2%E6%98%AF%20%22abc%22%EF%BC%8C%E6%89%80%E4%BB%A5%E5%85%B6%E9%95%BF%E5%BA%A6%E4%B8%BA%203%E3%80%82%0A%60%60%60%0A%0A%23%23%23%23%20%E6%80%9D%E8%80%83%0A-%20%E6%AD%A3%E5%90%91%E6%80%9D%E7%BB%B4%0A%20%20%20%20-%20%E8%8B%A5%E8%A6%81%E7%A1%AE%E5%AE%9A%E6%9C%80%E9%95%BF%E5%AD%90%E4%B8%B2%EF%BC%8C%E5%88%99%E9%9C%80%E7%A1%AE%E5%AE%9A%E5%88%9D%E5%A7%8B%E4%BD%8D%E7%BD%AE%24i%24%EF%BC%8C%E7%BB%93%E6%9D%9F%E4%BD%8D%E7%BD%AE%24j%24%E3%80%82%0A%20%20%20%20-%20%E5%A6%82%E4%BD%95%E5%9C%A8%24i%20%5Cto%20j%24%E8%BF%99%E4%B8%AA%E9%95%BF%E5%BA%A6%E5%86%85%E4%BF%9D%E8%AF%81%E4%B8%8D%E5%90%AB%E9%87%8D%E5%A4%8D%E5%AD%97%E7%AC%A6%E5%91%A2%3F%20%E8%BF%99%E5%B0%B1%E9%9C%80%E8%A6%81%E6%98%A0%E5%B0%84%E4%BA%86%EF%BC%8C%E6%9C%AC%E6%9D%A5%E6%88%91%E6%89%93%E7%AE%97%E4%BD%BF%E7%94%A8map%EF%BC%8C%E5%8F%AF%E6%98%AF%E8%BF%99%E4%B8%AA%E5%8C%BA%E9%97%B4%E7%AA%97%E5%8F%A3%E6%98%AF%E4%BC%9A%E5%8F%98%E5%8C%96%E7%9A%84%EF%BC%8Cmap%E5%88%A0%E9%99%A4%E5%85%83%E7%B4%A0%E6%97%B6%E6%9C%89%E7%82%B9%E5%84%BF%E9%BA%BB%E7%83%A6%E3%80%82%E4%BA%8E%E6%98%AF%EF%BC%8C%E8%80%83%E8%99%91%E6%95%B0%E7%BB%84%24a%24%2C%E7%B4%A2%E5%BC%95%E4%BF%9D%E7%95%99%E5%AD%97%E7%AC%A6%E5%80%BC%EF%BC%8C%E6%95%B0%E7%BB%84%E7%9A%84%E5%80%BC%E7%AD%89%E4%BA%8E%E8%BF%99%E4%B8%AA%E5%AD%97%E7%AC%A6%E5%BD%93%E5%89%8D%E7%9A%84%E4%BD%8D%E7%BD%AE%0A%20%20%20%20-%20%E6%8E%A5%E4%B8%8B%E6%9D%A5%EF%BC%8C%E5%B0%B1%E6%98%AF%E7%A1%AE%E5%AE%9A%E8%BF%99%E4%B8%AA%E5%8C%BA%E9%97%B4%E7%AA%97%E5%8F%A3%E5%A6%82%E4%BD%95%E5%8F%98%E5%8C%96%3F%E5%88%9D%E5%A7%8B%E4%BD%8D%E7%BD%AE%20%24i%24%20%E5%8F%97%E5%90%8E%E6%9D%A5%24j%24%E7%9A%84%E5%8A%A0%E5%85%A5%E7%9A%84%E5%BD%B1%E5%93%8D%EF%BC%8C%E5%A6%82%E6%9E%9C%24j%24%E5%8A%A0%E5%85%A5%E5%90%8E%E7%9A%84%E5%AD%97%E7%AC%A6%EF%BC%8C%E5%9C%A8%E6%95%B0%E7%BB%84%20%24a%24%E7%9A%84%E4%BD%8D%E7%BD%AE%E6%AF%94%E5%8E%9F%E6%9D%A5%E7%9A%84%E5%A4%A7%EF%BC%8C%E9%82%A3%E5%B0%B1%E8%AF%B4%E6%98%8E%E5%AD%98%E5%9C%A8%E9%87%8D%E5%A4%8D%E7%9A%84%E5%AD%97%E7%AC%A6%E4%BA%86%EF%BC%8C%E6%9B%B4%E6%96%B0%E8%BF%99%E4%B8%AA%24i%24%E5%88%B0%E9%87%8D%E5%A4%8D%E7%9A%84%E4%BD%8D%E7%BD%AE%E3%80%82%0A%0A**%E6%B3%A8%E6%84%8F%EF%BC%9A**%0A-%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%85%E6%8B%ACASCII%E5%AD%97%E7%AC%A6%E8%A1%A8%E5%86%85%E6%89%80%E6%9C%89%E7%9A%84%E5%AD%97%E7%AC%A6%EF%BC%8C%E6%B3%A8%E6%84%8F%E6%95%B0%E7%BB%84a%E5%88%9D%E5%A7%8B%E5%8C%96%E7%9A%84%E8%8C%83%E5%9B%B4%E3%80%82%0A-%20%E7%94%B1%E4%BA%8E%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E9%95%BF%E5%BA%A6%E5%8F%AF%E8%83%BD%E4%B8%BA1%EF%BC%8C%E5%B0%86%E5%88%9D%E5%A7%8B%E4%BD%8D%E7%BD%AE%20%24i%24%20%E5%88%9D%E5%A7%8B%E5%8C%96%E4%B8%BA%24-1%24%E5%B0%B1%E8%A1%8C%2C%E8%BF%99%E6%A0%B7%2C%24j%20%3D%200%E6%97%B6%EF%BC%8Cj-i%3D%201%24%E3%80%82%0A-%20%E4%B8%BA%E4%BA%86%E4%BF%9D%E7%95%99%E5%8E%9F%E6%9D%A5%E4%B8%8D%E5%AD%98%E5%9C%A8%E9%87%8D%E5%A4%8D%E5%AD%97%E7%AC%A6%E6%97%B6%EF%BC%8C%20%24i%24%20%E7%9A%84%E4%BD%8D%E7%BD%AE%E4%B8%8D%E5%8F%97%E5%BD%B1%E5%93%8D%EF%BC%8C%E9%9C%80%E8%A6%81%E5%B0%86%E6%95%B0%E7%BB%84%24a%24%E7%9A%84%E6%89%80%E6%9C%89%E5%80%BC%E5%88%9D%E5%A7%8B%E5%8C%96%E4%B8%BA%24-1%24.%0A%0A%0A%23%23%23%23%20%E9%A2%98%E8%A7%A3%0A%60%60%60java%0Aclass%C2%A0Solution%C2%A0%7B%0A%C2%A0%C2%A0%C2%A0%C2%A0public%C2%A0int%C2%A0lengthOfLongestSubstring(String%C2%A0s)%C2%A0%7B%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0int%C2%A0i%C2%A0%3D%C2%A0-1%3B%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0int%C2%A0res%C2%A0%3D%C2%A00%3B%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0int%5B%5D%C2%A0a%C2%A0%3D%C2%A0new%C2%A0int%5B128%5D%3B%C2%A0%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0Arrays.fill(a%2C%C2%A0-1)%3B%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0for(int%C2%A0j%C2%A0%3D%C2%A00%3B%C2%A0j%C2%A0%3C%C2%A0s.length()%3B%C2%A0j%C2%A0%2B%2B)%C2%A0%7B%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0i%C2%A0%3D%C2%A0Math.max(i%2C%C2%A0a%5Bs.charAt(j)%5D)%3B%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0int%C2%A0cur%C2%A0%3D%C2%A0j%C2%A0-%C2%A0i%3B%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0res%C2%A0%3D%C2%A0Math.max(res%2C%C2%A0cur)%3B%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0a%5Bs.charAt(j)%5D%C2%A0%3D%C2%A0j%3B%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%7D%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%2F%2F%C2%A0System.out.println(Arrays.toString(a))%3B%0A%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0return%C2%A0res%3B%0A%C2%A0%C2%A0%C2%A0%C2%A0%7D%0A%7D%0A%60%60%60
posted @ 2020-02-05 18:41  tumint  阅读(76)  评论(0)    收藏  举报