int lengthOfLongestSubstring(string s) {
int iv[128]; for (int i = 0; i < 128; i++) iv[i] = -1;
//用一个数组来储存每个字符最后出现的位置,默认值为-1,即为未出现过
int lp = 0; int rp = 0;
//定义两个指针来确定子字符串的边界
int result = 0;
while (rp < s.size()) {
if (iv[s[rp]] < lp) iv[s[rp]] = rp;
//该字符未出现过,或者出现过但是在左指针的左边,记录位置
else {
int size = rp - lp;
if (size > result) result = size;
lp = iv[s[rp]] + 1; //将左指针移到重复字符的下一位
iv[s[rp]] = rp; //更新位置
}
rp++;
}
int size = rp - lp; if (size > result) result = size;
return result;
}
无重复字符的最长子串【c++数组实现】O(n)复杂度
最新推荐文章于 2024-01-16 21:37:47 发布
本文介绍了如何使用C++数组方法,在线性时间复杂度O(n)下解决找到字符串中无重复字符的最长子串问题。通过滑动窗口策略,动态维护一个无重复字符的子串,更新最大长度。
536

被折叠的 条评论
为什么被折叠?



