帮我写一个java的算法题
时间: 2024-01-23 11:03:35 浏览: 111
JAVA算法题
好的,下面为您提供一道 Java 算法题:
题目描述:
给定一个字符串,找出其中最长的无重复字符子串,并返回其长度。
示例:
输入: "abcabcbb"
输出: 3
解释: 最长的无重复字符子串是 "abc",长度为 3。
输入: "bbbbb"
输出: 1
解释: 最长的无重复字符子串是 "b",长度为 1。
输入: "pwwkew"
输出: 3
解释: 最长的无重复字符子串是 "wke",长度为 3。
请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串。
解题思路:
这道题可以用滑动窗口算法来解决。首先定义一个窗口,用两个指针 left 和 right 来表示窗口的左右边界。然后,我们可以移动 right 指针来扩展窗口,直到遇到重复字符为止。此时,我们记录下当前窗口的长度,并将 left 指针移动到重复字符的下一个位置。同时,我们还需要记录下每个字符最后一次出现的位置,以便在遇到重复字符时快速将 left 指针移动到正确的位置。最后,我们可以不断地移动 right 指针,重复上述过程,直到 right 指针到达字符串末尾。
Java 代码实现:
```
public int lengthOfLongestSubstring(String s) {
if (s == null || s.length() == 0) {
return 0;
}
int n = s.length();
int maxLen = 0;
Map<Character, Integer> map = new HashMap<>();
for (int left = 0, right = 0; right < n; right++) {
char c = s.charAt(right);
if (map.containsKey(c)) {
left = Math.max(left, map.get(c) + 1);
}
map.put(c, right);
maxLen = Math.max(maxLen, right - left + 1);
}
return maxLen;
}
```
以上就是本题的解题思路和 Java 实现。
阅读全文