java在不重复字符的情况下查找最长子字符串的长度
所以我要解决的问题是,给定一个字符串,求出最长子字符串的长度,而不需要重复字符。我知道基于HashMap的解决方案,但在子字符串重叠的情况下,它会失败。这是我的密码
public static int lengthOfLongestSubstring(String s) {
Deque<Character> primary = new ArrayDeque<>();
Deque<Character> secondary = new ArrayDeque<>();
for (int i = 0; i < s.length() ; i++) {
char c = s.charAt(i);
if(primary.contains(c)){
while(primary.peek() != c){
secondary.offerLast(primary.poll());
}
secondary.offerFirst(c);
primary = secondary;
secondary.clear();
}else{
primary.offerFirst(c);
}
}
return primary.size();
}
这在我做primary = secondary
的地方失败了,否则我认为我在逻辑上做得对。
为了测试正确性,我使用了字符串dvdf
有人能帮我理解为什么这不起作用吗
# 1 楼答案
可能不是你想要的确切答案。尽量避免在多线程环境中使用ArrayDeque,因为它不是线程安全的
通过以下链接:
Find longest substring without repeating characters
这将返回一个字符串。你可以用。方法,并根据需要查找长度
希望能有帮助
# 2 楼答案
# 3 楼答案
我想知道:
这是参考作业。您可以将
primary
和secondary
设置为指向相同的数据并将其清除。这是你的意图吗那么这个呢:
输出
dvdf
=>;三,dvdfvadv
=>;四,编辑
你的逻辑是正确的。我刚改了一行
编辑
记录最长的时间
# 4 楼答案
您可以尝试以下方法: