class Solution {public: int lengthOfLongestSubstring(string s) { if(s.size() == 0) return 0; 讲解该代码
时间: 2023-06-17 19:05:20 浏览: 168
这是一段求解最长无重复子串长度的代码,下面对其进行讲解:
```
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.size() == 0) return 0; // 如果字符串为空,返回0
```
首先判断给定的字符串s是否为空,如果为空,那么最长无重复子串的长度为0。
```
int maxLen = 1; // 最长无重复子串的长度最小为1
int start = 0; // 子串的起始位置
int end = 0; // 子串的结束位置
int n = s.size(); // 字符串s的长度
unordered_set<char> hash; // 用一个哈希表记录出现过的字符
while(end < n){
if(hash.find(s[end]) == hash.end()){ // 如果当前字符不在哈希表中,将其加入哈希表
hash.insert(s[end]);
end++; // 将子串的结束位置向右移动
maxLen = max(maxLen, end - start); // 更新最长无重复子串的长度
}else{ // 如果当前字符在哈希表中,就将子串的起始位置向右移动,直到子串中不包含当前字符为止
hash.erase(s[start]);
start++;
}
}
return maxLen; // 返回最长无重复子串的长度
}
};
```
接下来,定义三个变量maxLen、start和end,分别表示当前最长无重复子串的长度、子串的起始位置和子串的结束位置。同时,定义一个哈希表hash,用于记录已经出现过的字符。
接着,用while循环遍历整个字符串s,如果当前字符不在哈希表中,就将其加入哈希表,并将子串的结束位置向右移动。如果当前字符在哈希表中,就将子串的起始位置向右移动,直到子串中不包含当前字符为止。在子串的每一个位置,都要更新一下最长无重复子串的长度maxLen。
最后,返回最长无重复子串的长度maxLen。
阅读全文