标签:子串 字符 int 重复 hashTable ans LeetCode
题目大意:
给定一个字符串\(s\),请你找出其中不含有重复字符的最长子串的长度。
题解:
用尺取法解题:
- 每次将左指针右移一位表示开始枚举下一个字符作为起始位置;
- 不断右移右指针直至出现重复字符,当前子串长度与答案进行比较;
- 重复以上操作。
过程中用哈希集合记录出现过的字符。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> hashTable;
int n = s.length();
int r = -1, ans = 0;
for (int i = 0; i < n; ++i) {
if (i) {
hashTable.erase(s[i - 1]);
}
while (r + 1 < n && !hashTable.count(s[r + 1])) {
hashTable.insert(s[r + 1]);
r++;
}
ans = max(ans, r - i + 1);
}
return ans;
}
};
标签:子串,字符,int,重复,hashTable,ans,LeetCode 来源: https://www.cnblogs.com/IzumiSagiri/p/15864774.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。