Java 实现:查找字符串中无重复字符的最长子串长度
可以使用滑动窗口的方法来解决这个问题。
我们维护一个窗口,窗口中包含的字符都是不重复的。我们使用两个指针 left 和 right 来表示窗口的左右边界。初始时,left 和 right 都指向字符串的第一个字符。
然后,我们依次将 right 向右移动,如果移动后的字符不在窗口中,那么就将其加入窗口,并更新窗口的最大长度;如果移动后的字符已经在窗口中,那么就需要将 left 向右移动,直到窗口中不包含重复字符为止。
具体实现如下:
public class Solution {
public int lengthOfLongestSubstring(String s) {
int n = s.length();
int left = 0, right = 0;
int maxLength = 0;
Set<Character> set = new HashSet<>();
while (right < n) {
char c = s.charAt(right);
if (!set.contains(c)) {
set.add(c);
maxLength = Math.max(maxLength, right - left + 1);
right++;
} else {
set.remove(s.charAt(left));
left++;
}
}
return maxLength;
}
}
时间复杂度:O(n),其中 n 是字符串的长度。遍历一次字符串即可。
空间复杂度:O(min(n, m)),其中 n 是字符串的长度,m 是字符集的大小。最坏情况下,字符集的大小等于字符串的长度,此时窗口中的字符都是不重复的,需要使用 O(n) 的额外空间。但是如果字符集的大小固定,比如只包含英文字母,那么空间复杂度是 O(1)。
原文地址: https://www.cveoy.top/t/topic/qmfY 著作权归作者所有。请勿转载和采集!