python求一个字符串的最长无重复字符子字符串的长度。例子:原始字符串:abcabcabc 返回结果3
时间: 2024-09-14 11:08:37 浏览: 38
要解决这个问题,我们可以使用滑动窗口的技术。具体步骤如下:
1. 初始化两个指针,分别表示当前考虑的子字符串的起始位置(left)和结束位置(right),以及一个哈希表用来记录字符最后出现的位置。
2. 遍历字符串,对于每一个字符,检查它是否在哈希表中,如果在,则更新左指针left到该字符上一次出现位置的下一个位置。
3. 在每次迭代中,记录当前子字符串的长度(right - left + 1),并更新最大长度。
4. 右指针right向右移动,继续步骤2和步骤3,直到遍历完字符串。
这个方法的关键在于,当遇到重复字符时,我们不从头开始,而是从上一次该字符出现位置的下一个位置开始,这样能保证我们得到的子字符串是无重复字符的,并且是尽可能长的。
下面是一个Python函数的示例代码:
```python
def length_of_longest_substring(s):
char_index_map = {}
left = 0
max_length = 0
for right in range(len(s)):
if s[right] in char_index_map and char_index_map[s[right]] >= left:
left = char_index_map[s[right]] + 1
char_index_map[s[right]] = right
max_length = max(max_length, right - left + 1)
return max_length
# 示例
original_string = "abcabcabc"
result = length_of_longest_substring(original_string)
print(result) # 输出结果为3
```
阅读全文