请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

leetcode 3号题

题目

https://img1.sycdn.imooc.com//szimg/5b7a49b70001424d07870818.jpg

我设置了两个游标pq记录左右边界,

我这样写p每次只能位移一个单位,进行了一些重复的操作

怎样才能记录下来已经扫描过的不重复子串 提高效率?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
    public int lengthOfLongestSubstring(String s) {
        int ret = 0;
        int p = 0, q = 0;
 
        while (q < s.length()) {
            int length = 0;
            HashSet<Character> set = new HashSet<>();
            for (; q < s.length(); q++) {
                if (!set.contains(s.charAt(q))) {
                    set.add(s.charAt(q));
                    length++;
                else {
                    ret = length > ret ? length : ret;
                    p++;
                    q = p;
                    break;
                }
                ret = length > ret ? length : ret;
            }
        }
        return ret;
    }
}


正在回答 回答被采纳积分+3

插入代码

2回答

提问者 一个很坏的好人 2018-08-20 13:32:51

懂了,之前不懂官方解答里面的map中value值存的是什么

原来存的是该字符对应的下一个位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Solution {
    public int lengthOfLongestSubstring(String s) {
        int n = s.length(), ans = 0;
        Map<Character, Integer> map = new HashMap<>(); // current index of character
        // try to extend the range [i, j]
        for (int j = 0, i = 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;
    }
}
0 回复 有任何疑惑可以回复我~
  • 赞!理解算法中变量的语意,是理解算法的关键,也是能够写出正确程序的关键:)继续加油!
    回复 有任何疑惑可以回复我~ 2018-08-20 13:34:16
liuyubobobo 2018-08-20 13:09:34
0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号