法一(滑动窗口)
/**
* 滑动窗口
*
* @param s
* @return
*/
public int lengthOfLongestSubstring(String s) {
int[] last = new int[128]; // 记录字符上一次出现的位置
Arrays.fill(last, -1);
int len = s.length(), ans = 0;
for (int left = 0, right = 0; right < len; right++) {
int c = s.charAt(right);
left = Math.max(left, last[c] + 1); // 更新窗口左侧位置
ans = Math.max(ans, right - left + 1); // 找到最大的窗口
last[c] = right; // 更新字符出现的位置
}
return ans;
}
本地测试
/**
* 3. 无重复字符的最长子串
*/
lay.showTitle(3);
Solution3 sol3 = new Solution3();
String s3 = "abcabcbb";
System.out.println(sol3.lengthOfLongestSubstring(s3));
本文介绍了一种使用滑动窗口方法来求解字符串中无重复字符的最长子串长度的Java实现。通过维护字符上一次出现的位置数组,动态调整窗口范围,找到最大子串长度。实例演示了如何在'abcabcbb'中找出最长无重复字符子串。
2976

被折叠的 条评论
为什么被折叠?



