leetcode 3号题
来源:15-1 更广阔的数据结构的世界,大家加油!
一个很坏的好人
2018-08-20
题目

我设置了两个游标pq记录左右边界,
我这样写p每次只能位移一个单位,进行了一些重复的操作
怎样才能记录下来已经扫描过的不重复子串 提高效率?
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;
}
}写回答
2回答
-
一个很坏的好人
提问者
2018-08-20
懂了,之前不懂官方解答里面的map中value值存的是什么
原来存的是该字符对应的下一个位置
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; } }012018-08-20 -
liuyubobobo
2018-08-20
00
相似问题