3. Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

 

//HashMap存的是字符和其对应的下标。i,j相当于设置两个指针,i从左往右扫,如果一个元素已经存在于map中,则把j移动到该上一个重复元素的右面,例如pwwkew,i等于2时检测到w已经存在,则把j设为2

 

public int lengthOfLongestSubstring(String s) {
if (s.length() == 0)
return 0;
HashMap<Character, Integer> map = new HashMap<>();
int max = 0;
for (int i = 0,j = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (map.containsKey(ch))
j = Math.max(j, map.get(ch) + 1); // 此处必须是Math.max(j, map.get(s.charAt(i)) + 1),如果只是j=map.get(s.charAt(i)) + 1,传入abba后,会产生错误结果
map.put(ch, i);
max = Math.max(max, i - j + 1);
}
return max;
}

 

posted @   MarkLeeBYR  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示