1. 程式人生 > >LeetCode 3-Longest Substring Without Repeating Characters()

LeetCode 3-Longest Substring Without Repeating Characters()

題目: https://leetcode.com/problems/longest-substring-without-repeating-characters/

概述 :找給定字串中不重複的最長子集。

思路 : 用map來儲存每個字母最後出現的位置。j來表示不出現重複字母的最後的位置。用當前的i - j + 1 就是求出不重複的子串的長度,如果能當前不重複的子串的長度大於以前求的最大值,就進行替換。要注意下面用的j = max(j, map[s[i]] + 1); 不可忽略,因為我們求j為最後不重複的下標的時候,也要考慮哪些j以前的map中的值,比如abba,算到最後一個a的時候 map[s[i]] + 1比j還小,但是它不是不重複子串的開始,所以不可取。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.length() == 0) return 0;
        map<char, int> map;
        int maxLen = 0;
        for(int i = 0, j = 0; i < s.length(); i++)
        {
            if(map.find(s[i]) != map.end())
            {
                j =
max(j, map[s[i]] + 1); } map[s[i]] = i; maxLen = max(maxLen, i - j + 1); } return maxLen; } };