我有一个名为 lengthOfLongestSubstring 的函数,它的工作是找到没有任何重复字符的最长子字符串。在大多数情况下,它可以工作,但是当它获得像“dvdf”这样的输入时,它会打印出 2(而不是 3),并在应该是 [d, vdf] 时给出 [dv, df]。
因此,我首先检查该字符串,看看是否有任何独特的字符。如果有,我将其附加到 ans 变量中。(我认为这是需要修复的部分)。如果存在重复项,我将其存储在子字符串链表中,并将 ans 变量重置为重复字符串。
遍历整个字符串后,我找到最长的子字符串并返回它的长度。
public static int lengthOfLongestSubstring(String s) {
String ans = "";
int len = 0;
LinkedList<String> substrings = new LinkedList<String>();
for (int i = 0; i < s.length(); i++) {
if (!ans.contains("" + s.charAt(i))) {
ans += s.charAt(i);
} else {
substrings.add(ans);
ans = "" + s.charAt(i);
}
}
substrings.add(ans); // add last seen substring into the linked list
for (int i = 0; i < substrings.size(); i++) {
if (substrings.get(i).length() >= len)
len = substrings.get(i).length();
}
System.out.println(Arrays.toString(substrings.toArray()));
return len;
}
下面是一些测试结果:
//correct
lengthOfLongestSubstring("abcabcbb") -> 3 ( [abc, abc, b, b])
lengthOfLongestSubstring("pwwkew") -> 3 ([pw, wke, w]).
lengthOfLongestSubstring("ABDEFGABEF"); -> 6 ([ABDEFG, ABEF])
// wrong
System.out.println(lengthOfLongestSubstring("acadf")); -> 3, ([ac, adf]) *should be 4, with the linked list being [a, cadf]
有什么建议来解决这个问题吗?我必须重做所有逻辑吗?
FFIVE
沧海一幻觉
陪伴而非守候
相关分类