题目1:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
时间: 2024-03-01 16:43:45 浏览: 88
给定一个字符串 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
```
相关问题
用Python完成这道题目:给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
以下是用Python实现的代码:
```python
def length_of_longest_substring(s):
# 定义一个字典用于存储字符及其出现的下标
char_dict = {}
# 定义左右指针和最大长度
left, right, max_length = 0, 0, 0
# 遍历字符串
for i in range(len(s)):
# 如果字符已经在字典中,并且其下标在左指针右侧,则将左指针移动到该字符的下一位
if s[i] in char_dict and char_dict[s[i]] >= left:
left = char_dict[s[i]] + 1
# 更新当前字符的下标
char_dict[s[i]] = i
# 更新右指针和最大长度
right = i
max_length = max(max_length, right - left + 1)
return max_length
```
该函数的基本思路是使用双指针和字典。遍历字符串时,右指针不断向右移动,将每个字符及其出现的下标存储在字典中。如果遇到重复字符,则将左指针移动到该字符的下一位,同时更新字典中对应字符的下标。遍历完整个字符串后,最大长度即为右指针和左指针之差加 1。
我需要java代码实现:给定一个字符串 s,请你找出其中不含有重复字符的 最长子串 的长度。
要找出不含有重复字符的最长子串的长度,可以使用哈希表实现,具体的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;
}
阅读全文