leetcode 3. Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters.

Example 1:

Input: "abcabcbb"
Output: 3 
Explanation: The answer is "abc", with the length of 3. 

Example 2:

Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.

Example 3:

Input: "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3. 
             Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

 

 1 class Solution {
 2 public:
 3     int lengthOfLongestSubstring(string s) {
 4         int i = 0, j = 0;
 5         map<char, int> mp; //值映射的是字符所在的下标位置
 6         int len = s.length(); //字符串的长度
 7         vector<int> dp(len, 0); //dp[j]表示以第j个字符结尾的不重复子串的长度
 8         int maxn = 0;
 9         for (j = 0; j < len; j++) {
10             //如果当前的字符已经之前出现过了,并且是在i之后位置的,那么要更新窗口左边的下标
11             if (mp.count(s[j]) > 0) { 
12                 i = max(i, mp[s[j]] + 1);
13             }
14             dp[j] = j - i + 1; //窗口大小即为以第j个字符结尾的最长不重复子串的长度
15             mp[s[j]] = j;
16             maxn = max(maxn, dp[j]);
17         }
18         return maxn;
19     }
20 };

 

posted @ 2019-08-30 00:17  琴影  阅读(172)  评论(0编辑  收藏  举报