对于在Qt基础上对求无重复字符的最长子串采用滑动窗口法进行算法说明
时间: 2024-05-10 17:15:15 浏览: 10
滑动窗口法是一种用于解决字符串和数组相关问题的算法,它可以在O(n)的时间复杂度内解决这些问题。在无重复字符的最长子串问题中,我们可以使用滑动窗口法来解决。
算法步骤如下:
1. 定义两个指针left和right,分别指向子串的左右边界。
2. 定义一个哈希表,用来存储子串中出现过的字符和它们的位置。
3. 遍历字符串,将字符和它们的位置存储到哈希表中。
4. 如果当前字符在哈希表中已经存在,说明出现了重复字符,此时需要更新left指针的位置,将left指针移到重复字符的下一个位置。
5. 计算当前子串的长度,如果比之前的最长子串长度还要长,更新最长子串长度。
6. 重复步骤3-5,直到遍历完整个字符串。
7. 返回最长子串长度。
下面是基于Qt实现的代码示例:
```cpp
int lengthOfLongestSubstring(QString s) {
if (s.isEmpty()) {
return 0;
}
int left = 0, right = 0;
int maxLength = 0;
QHash<QChar, int> hash;
while (right < s.length()) {
QChar c = s.at(right);
if (hash.contains(c) && hash.value(c) >= left) {
left = hash.value(c) + 1;
}
hash.insert(c, right);
int length = right - left + 1;
maxLength = qMax(maxLength, length);
++right;
}
return maxLength;
}
```
在代码中,我们使用了QHash来存储子串中出现过的字符和它们的位置,QChar代表一个字符,QHash的key是字符,value是该字符在字符串中的位置。在遍历字符串时,如果当前字符已经在哈希表中出现过,并且位置在[left, right]区间内,说明出现了重复字符,需要更新left指针的位置。
最后返回最长子串长度即可。