思路解析:(反复看,重点看!!)
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int len=s.length();
if(len==0)
return 0;
int left=-1;
int max_count=0;
unordered_map<char,int> map;
for(int i=0;i<len;i++)
{
if(map.find(s[i])!=map.end())
{
left=max(left,map[s[i]]);
}
map[s[i]]=i;
max_count=max(max_count,i-left);
}
return max_count;
}
};
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if (s == "") return 0;
if (s.length() == 1) return 1;
unordered_map<char, int> position;
vector<int> dp(s.length(), 0);
int res = 0, count = 0;
for (int i = 0; i < s.length(); i++) {
if (i != 0 && position.find(s[i]) == position.end()) {
dp[i] = dp[i - 1] + 1;
}
else if (i == 0) {
dp[i] = 1;
}
else {
int j = position[s[i]];
if (i - j <= dp[i - 1]) {
dp[i] = i - j;
}
else {
dp[i] = dp[i - 1] + 1;
}
}
position[s[i]] = i;
res = max(res, dp[i]);
}
return res;
}
};
作者:hao0217
链接:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/solution/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-5rxj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
因为每次dp结果只与上一次dp的结果有关,将上述代码优化空间复杂度得到:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.empty()) return 0;
int res = 0, tmp = 0;
unordered_map<char ,int> hash;
for(int i = 0; i < s.length(); i++){
int j = 0;
if(hash.count(s[i]) != 0)
j = hash[s[i]];
else j = -1;
hash[s[i]] = i;
tmp = tmp < i - j ? tmp + 1 : i - j;
res = max(res, tmp);
}
return res;
}
};
作者:hao0217
链接:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/solution/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-5rxj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。