牛客题霸--找到字符串的最长无重复字符子串
找到字符串的最长无重复字符子串
题目链接
Solution
寻找最长的无重复子串。
考虑以一个位置结尾的可以往前延伸到的位置,根据此位置求出无重复子串的长度。
具体操作可以记录一个指针,这个指针记录到当前位置时,可以往前延伸的最前的位置。
考虑如何更新指针,从一个位置到下一个位置时,加入了一个数a:
- 如果a在前面没有出现过,指针不变,并记下这个数。
- 如果a出现过,那么指针的位置要大于a上次出现的位置,即now=max(now,last[a]);
所以定义一个map,时刻更新每个数字上次出现的位置即可。
Code
class Solution {
public:
int maxLength(vector<int>& arr) {
map<int,int> last;
int ans = 0, now = 0;
for (int i = 0; i < (int)arr.size(); ++i) last[arr[i]] = -1;
for (int i = 0; i < (int)arr.size(); ++i) {
if (last[arr[i]] != -1) now = max(now, last[arr[i]] + 1);
ans = max(ans, i - now + 1);
last[arr[i]] = i;
}
return ans;
}
};
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步