class Solution { public: int lengthOfLongestSubstring(string s) { if(s.length()==0) return 0; vector<int> dp(s.size(),0); dp[0] = 1; // 初始状态。 // dp[i] 包含当前字符的子串长度 for(int i = 1; i < s.length(); i++){ int k = -1; for(int j = 0; j <i; j++){ if(s[i] == s[j]) k = j; } if(k>=0) // dp[i] = i-k; dp[i] = min(i-k,dp[i-1]+1); // 针对abba这种情况 else dp[i] = dp[i-1] + 1; } int res = INT_MIN; for(int i = 0; i < dp.size(); i++){ res = max(res, dp[i]); cout<<"dp:"<<dp[i]<<endl; } return res; } };
进一步优化
class Solution { public: int lengthOfLongestSubstring(string s) { if(s.length()==0) return 0; vector<int> dp(s.size(),0); dp[0] = 1; // 初始状态。 // dp[i] 包含当前字符的子串长度 int start = 0; for(int i = 1; i < s.length(); i++){ int k = -1; for(int j = start; j <i; j++){ if(s[i] == s[j]){ start = j; k = j; } } if(k>=0) dp[i] = i-k; // dp[i] = min(i-k,dp[i-1]+1); // 针对abba这种情况 else dp[i] = dp[i-1] + 1; } int res = INT_MIN; for(int i = 0; i < dp.size(); i++){ res = max(res, dp[i]); cout<<"dp:"<<dp[i]<<endl; } return res; } };
原文:https://www.cnblogs.com/ymec/p/15005983.html