给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
示例 2:
输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是"b"
,所以其长度为 1。
思路:这个比较简单,判断循环即可,判断s[i]与s[j]是否相等,若不等,则判断s[j]与s[i]之间的数即(s[i+1],s[i+2].....s[j-1]),若都不等,则继续循环,直到相等或者到字符串结尾终止。
#pragma once #include <string> #include <vector> #include <algorithm> using namespace std; /* 执行用时 : 480 ms, 在Longest Substring Without Repeating Characters的C++提交中击败了2.12% 的用户 内存消耗 : 14.6 MB, 在Longest Substring Without Repeating Characters的C++提交中击败了0.93% 的用户 */ int lengthOfLongestSubstring(string s) { int max = 0,temp2; for (int i = 0; i < s.size(); i++) { int temp = 1; for (int j = i + 1; j < s.size(); j++) { if (s[i] != s[j]) { temp2 = 0; for (int t = j - 1; t > i; t--) { if (s[j] != s[t]) temp2++; } if (temp2 == j - i - 1) { temp++; } else break; } else break; } if (temp > max) max = temp; } return max; } /* 优解 执行用时:12ms */ int lengthOfLongestSubstring_Best(string s) { vector<int>v(128, 0); int t = 0; int ans = 0; for (int i = 0; i < s.length(); i++) { t = max(t, v[s[i]]); //max函数在头文件algorithm中 ans = max(ans, i - t + 1); v[s[i]] = i + 1; } return ans; }