public int lengthOfLongestSubstring(String s) {
Map<Character, Integer> dic = new HashMap<>();
int res = 0;
int tmp = 0;
for(int j = 0; j < s.length(); j++) {
// 获取索引 i
int i = dic.getOrDefault(s.charAt(j), -1);
// 更新哈希表
dic.put(s.charAt(j), j);
// dp[j - 1] -> dp[j]
if (tmp < j - i){
tmp += 1;
}else {
tmp = j - i;
}
// max(dp[j - 1], dp[j])
res = Math.max(res, tmp);
}
return res;
}