我需要java代码实现:给定一个字符串 s,请你找出其中不含有重复字符的 最长子串 的长度。
时间: 2023-02-23 09:36:23 浏览: 62
要找出不含有重复字符的最长子串的长度,可以使用哈希表实现,具体的java代码如下: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) {
// try to extend the range [i, j]
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;
}
相关问题
题目1:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
给定一个字符串 s ,要找出其中不含有重复字符的最长子串的长度,可以使用滑动窗口的方法来解决。滑动窗口是指在一个字符串或数组上维护一个窗口,通过移动窗口的起始位置和结束位置来寻找目标子串。
具体的步骤如下:
1. 创建一个空的集合(用来检测字符是否重复)和两个指针,分别指向子串的起始位置和结束位置。
2. 将结束位置的字符添加到集合中。
3. 如果集合中已经存在当前字符,则移动起始位置的指针,并从集合中删除起始位置的字符,直到集合中不再存在当前字符。
4. 更新最长子串的长度(结束位置 - 起始位置 + 1)。
5. 将结束位置的指针向右移动一位,并将新字符添加到集合中。
6. 重复步骤2到5,直到结束位置达到字符串的末尾。
下面是使用滑动窗口方法的Python代码实现:
```python
def lengthOfLongestSubstring(s):
if not s:
return 0
charset = set()
start = 0
max_len = 0
for end in range(len(s)):
while s[end] in charset:
charset.remove(s[start])
start += 1
charset.add(s[end])
max_len = max(max_len, end - start + 1)
return max_len
```
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度用java实现
可以使用滑动窗口算法来解决这个问题,具体步骤如下:
1. 定义一个哈希集合用于记录当前窗口中存在的字符。
2. 使用双指针 i 和 j 表示滑动窗口的左右边界,初始值都为 0。
3. 遍历字符串 s,每次移动右指针 j,并将对应的字符加入到哈希集合中。
4. 如果发现哈希集合中已经存在了 s[j] 这个字符,说明当前窗口中存在重复字符,需要移动左指针 i,并将对应的字符从哈希集合中删除,直到窗口中不再存在重复字符为止。
5. 每次移动左指针 i 和右指针 j 后都需要更新最长子串的长度。
下面是 Java 代码实现:
```java
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;
}
```