今日头条Java三面:GC+堆排+Tomcat+算法题,YSL面试成功分享
// 算法题2:给定一个字符串,请找出一个最长的不包含重复字符的子字符串的长度。
public class Solution {
public int lengthOfLongestSubstring(String s) {
int n = s.length();
Set<Character> set = new HashSet<>();
int ans = 0, i = 0, j = 0;
while (i < n && j < n) {
if (!set.contains(s.charAt(j))){
set.add(s.charAt(j++));
ans = Math.max(ans, j - i);
} else {
set.remove(s.charAt(i++));
}
}
return ans;
}
public static void main(String[] args) {
Solution solution = new Solution();
String input = "abcabcbb";
System.out.println("最长不含重复字符的子字符串长度为: " + solution.lengthOfLongestSubstring(input));
}
}
这段代码使用了一个哈希集合来存储已经遍历过的字符,并通过两个指针i和j来维护一个滑动窗口。算法的核心思想是不断地扩大窗口直到遇到重复的字符,然后移除窗口的左边字符直到不再重复,并更新最长子字符串长度。这个方法的时间复杂度为O(N),N为字符串的长度,因为我们只遍历字符串一次。
评论已关闭