LeetCode133:給定一個字串,找出最長的不具有重複字元的子串的長度。例如,“abcabcbb”不具有重複字元的最長子串是“abc”,長度為3。對於“bbbbb”,最長的不具有重複字元的子串是

Mamba_Fly發表於2020-10-04

題目描述

給定一個字串,找出最長的不具有重複字元的子串的長度。例如,“abcabcbb”不具有重複字元的最長子串是“abc”,長度為3。對於“bbbbb”,最長的不具有重複字元的子串是“b”,長度為1。
示例1
輸入 ::""
輸出 : 0

思路解析:本題目可以說是一個很典型的利用滑動視窗的字串型別的題目。設定兩個指標,限定了一個視窗,視窗內的字元不能夠重複,每次右指標移動時都會檢查視窗內是否是重複元素,如果有的話那麼調整左指標的位置,定義一個res值記錄最大的視窗值就是問題的解。

class Solution {
public:
    /**
     * 
     * @param s string字串 
     * @return int整型
     */
    int lengthOfLongestSubstring(string s) {
        if(s.empty())//空串檢查
        	return 0;
        map<char,int> book;//定義map
        int i,Max=0,pre=-1;//i為左指標,pre為右指標的位置
        for(i=0;i<s.length();i++) 
            book[s[i]]=-1;
        for(i=0;i<s.length();i++)
        {
            pre=max(pre,book[s[i]]);
            Max=max(Max,i-pre);
            book[s[i]]=i;
        }
        return Max;
    }
};

相關文章