Leetcode Problem3

Longest Substring Without Repeating Characters
这个问题是要求找到字符串中最长的没有重复字母的子字符串。这个问题就是要找到一个窗口,使得这个窗口里面的字母不重复。解决方法:维持一个滑动窗口,这个滑动窗口的大小是不固定的,每次滑动窗口向右边扩展,如果右边的字母与滑动窗口内某个字母重复,则将该滑动窗口取消,然后从下个字母继续。为了求出窗口的大小,我们需要一个变量left来指向滑动窗口的左边界,这样,如果当前遍历到的字符从未出现过,那么直接扩大右边界,如果之前出现过,left加一,滑动窗口长度变为1,并保存最大的滑动窗口长度。
在https://www.cnblogs.com/grandyang/p/4480780.html这篇博客学习到,由于ASCII表只能表示256种符号,所以用一个256位的数组来表示该符号最后出现的位置。需要定义两个变量res和left,其中res用来记录最长无重复子串的长度,left指向该无重复子串左边的起始位置,然后我们遍历整个字符串,对于每一个遍历到的字符,如果哈希表中该字符串对应的值为0,说明没有遇到过该字符,则此时计算最长无重复子串,i - left +1,其中i是最长无重复子串最右边的位置,left是最左边的位置,还有一种情况也需要计算最长无重复子串,就是当哈希表中的值小于left,这是由于此时出现过重复的字符,left的位置更新了,如果又遇到了新的字符,就要重新计算最长无重复子串。最后每次都要在哈希表中将当前字符对应的值赋值为i+1。

猜你喜欢

转载自www.cnblogs.com/nihwo/p/9396228.html