3. 无重复字符的最长子串(O(N))
给定一个字符串,找出不含有重复字符的 最长子串 的长度。
示例:
给定 "abcabcbb"
,没有重复字符的最长子串是 "abc"
,那么长度就是3。
给定 "bbbbb"
,最长的子串就是 "b"
,长度是1。
给定 "pwwkew"
,最长子串是 "wke"
,长度是3。请注意答案必须是一个子串,"pwke"
是 子序列 而不是子串。
class Solution { public: int lengthOfLongestSubstring(string str) { int vis[130];//vis[i] 记录字符i最后一次出现的位置 memset(vis, -1, sizeof vis); int n = (int)str.size(); int ans = 0;//最后结果 int pre = -1; //记录当前不重复子串的起始位置 for (int i = 0; i < n; i ++) { // 比较当前字符最后一次出现的位置vis[str[i]]: // 如果大于pre(当前不重复子串的起始位置)那么子串的起始位置就要变成vis[str[i]] + 1了 // 如果小于pre,那么就无关紧要了,这个子串可以加入到不重复子串中 pre = pre > vis[str[i]] ? pre : vis[str[i]]; int cnt = i - pre; ans = ans < cnt ? cnt : ans; vis[str[i]] = i; } return ans; } };
我每天都在努力,只是想证明我是认真的活着.