题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/
题目:
longest substring
Examples:
"abcabcbb"
, the answer is "abc"
, which the length is 3."bbbbb"
, the answer is "b"
, with the length of 1."pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
思路:
实质是求s内的相同字符之间的最大长度 将s将相同字符之间分割为一个个子串 比较长度,所以需要保存前面跟自己相同的字符的位置。
算法:
public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0)
return 0;
int max = 1;
int idx = -1;// 当前子串的起始位置
// idx取-1 是因为当字符串本身就是最长子串时 idx不会被修改 而max需要为s的长度需要加1
Map<String, Integer> maps = new HashMap<String, Integer>();
char c[] = s.toCharArray();
for (int i = 0; i < c.length; i++) {
if (maps.containsKey(c[i] + "") && maps.get(c[i] + "") > idx) {
idx = maps.get(c[i] + "");
}
max = Math.max(max, i - idx);
maps.put(c[i] + "", i);
}
return max;
}