成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

LeetCode 3——無重復(fù)字符的最長子串

Rocture / 1290人閱讀

摘要:題目解答方法一我們從前往后遍歷字符串,代表最長子串的起始位置,一開始設(shè)置為零。如果沒有遇到重復(fù)字符,則更新子串的長度,向后遍歷。最長子串的起始位置重復(fù)的字符在子串中的位置初始化映射自動(dòng)初始化為零獲取更多精彩,請關(guān)注

1. 題目

2. 解答 2.1. 方法一

我們從前往后遍歷字符串,start 代表最長子串的起始位置,一開始設(shè)置為零。

如果沒有遇到重復(fù)字符,則更新子串的長度,向后遍歷。

如果遇到重復(fù)字符時(shí),則更新字符串起始位置為上一個(gè)相同字符的后面一個(gè)位置,同時(shí)更新子串長度。

重復(fù)上面這個(gè)過程,直到遍歷完畢。

"abcabc",start = 0,str_len = 1, 2, 3
此時(shí)第二次遇到 "a",start = 1,str_len = 3
此時(shí)第二次遇到 "b",start = 2,str_len = 3
此時(shí)第二次遇到 "c",start = 3,str_len = 3
class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """

        max_len = 0
        str_len = 0
        start = 0      # 最長子串的起始位置
        index = 0     # 上一個(gè)相同字符在子串中的位置,是一個(gè)相對位置,不是在原字符串中的位置
        
        for i in range(len(s)):
            
            if (s[i] not in s[start:i]):
                str_len += 1
               
            # 如果遇到重復(fù)字符,更新子串的起始位置為上一個(gè)相同字符的后面一個(gè)位置
            # 同時(shí)我們需要更新子串長度
            else:
                max_len = max(max_len, str_len)
                index = s[start:i].find(s[i])
                str_len = str_len - index
                start = start + index + 1 
                
        max_len = max(max_len, str_len) # 一直沒有遇到重復(fù)字符
        return max_len
2.2. 方法二

方法一中,我們每次判斷當(dāng)前字符是否為重復(fù)字符時(shí),都需要在子串中進(jìn)行搜索,更新子串起始位置時(shí),也要在子串中搜索上一個(gè)相同字符的位置,效率很低。

其實(shí)我們需要知道的就是一個(gè)子串的起始位置,然后往后遍歷的時(shí)候只需要在適當(dāng)?shù)臅r(shí)候更新這個(gè)起始位置重新計(jì)算子串長度即可。

因此,我們可以建立一個(gè)當(dāng)前字符和當(dāng)前字符下一個(gè)位置的映射。

所有映射全部初始化為零,start = 0。從前往后開始遍歷字符串,同時(shí)更新映射,計(jì)算子串長度。

如果當(dāng)前字符的映射大于 start,說明在 satrt 后面出現(xiàn)過當(dāng)前字符,就更新 start。

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        max_len = 0
        str_len = 0
        start = 0    # 最長子串的起始位置
        index = 0   # 重復(fù)的字符在子串中的位置
        
        # 初始化映射
        table = []
        for i in range(128):
            table.append(0)
                
        for i in range(len(s)):
            
            start =  max(start, table[ord(s[i])])

            str_len = i - start + 1    
            max_len = max(max_len, str_len)
            
            table[ord(s[i])] = i + 1
            
        return max_len
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        
        int table[128] = {0}; // 自動(dòng)初始化為零
        int max_len = 0;
        int str_len = 0;
        int start = 0;
        
        string::iterator it = s.begin();
            
        for (int j = 0; it != s.end(); it++, j++)
        {
            start = start > table[*it] ? start : table[*it];
            table[*it] = j + 1;
            str_len = j - start + 1;
            max_len = max_len < str_len ? str_len : max_len;
        }
        
        return max_len;
    }
};

獲取更多精彩,請關(guān)注「seniusen」!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/44912.html

相關(guān)文章

  • LeetCode3.重復(fù)字符最長子串JavaScript

    摘要:示例輸入輸出解釋因?yàn)闊o重復(fù)字符的最長子串是,所以其長度為。請注意,你的答案必須是子串的長度,是一個(gè)子序列,不是子串。 LeetCode3.無重復(fù)字符的最長子串JavaScript 給定一個(gè)字符串,請你找出其中不含有重復(fù)字符的最長子串的長度。 示例 1: 輸入: abcabcbb輸出: 3 解釋: 因?yàn)闊o重復(fù)字符的最長子串是 abc,所以其長度為 3。 示例 2: 輸入: bbbbb輸出...

    vboy1010 評論0 收藏0
  • leetcode3. 重復(fù)字符最長子串

    摘要:示例輸入輸出解釋因?yàn)闊o重復(fù)字符的最長子串是,所以其長度為。請注意,你的答案必須是子串的長度,是一個(gè)子序列,不是子串。完成循環(huán)后取隊(duì)列中出現(xiàn)的最大長度即可。 給定一個(gè)字符串,請你找出其中不含有重復(fù)字符的?最長子串?的長度。 示例?1: 輸入: abcabcbb 輸出: 3 解釋: 因?yàn)闊o重復(fù)字符的最長子串是 abc,所以其長度為 3。 示例 2: 輸入: bbbbb 輸出: 1 解釋:...

    qc1iu 評論0 收藏0
  • LeetCode.3 重復(fù)字符最長子串(JS)

    摘要:先跳到第三題是因?yàn)榈诙}第一眼沒讀懂一題目無重復(fù)字符的最長子串給定一個(gè)字符串,請你找出其中不含有重復(fù)字符的最長子串的長度。示例輸入輸出解釋因?yàn)闊o重復(fù)字符的最長子串是,所以其長度為。以此來實(shí)現(xiàn)判斷是否包含重復(fù)字符。 先跳到第三題是因?yàn)榈诙}第一眼沒讀懂 一、題目 無重復(fù)字符的最長子串: 給定一個(gè)字符串,請你找出其中不含有重復(fù)字符的 最長子串 的長度。 示例1 輸入: abcabcbb輸...

    wthee 評論0 收藏0
  • leetcode 重復(fù)字符最大子串

    摘要:示例輸入輸出解釋因?yàn)闊o重復(fù)字符的最長子串是,所以其長度為。請注意,你的答案必須是子串的長度,是一個(gè)子序列,不是子串。臨時(shí)存儲(chǔ)子串存儲(chǔ)最長子串如果子串中不存在如果子串中存在重復(fù)字符的位置截取字符串 給定一個(gè)字符串,請你找出其中不含有重復(fù)字符的 最長子串 的長度。 示例 1: 輸入: abcabcbb 輸出: 3 解釋: 因?yàn)闊o重復(fù)字符的最長子串是 abc,所以其長度為 3。 示例 2...

    laoLiueizo 評論0 收藏0
  • 力扣(LeetCode)3

    摘要:示例輸入輸出解釋因?yàn)闊o重復(fù)字符的最長子串是,所以其長度為。請注意,你的答案必須是子串的長度,是一個(gè)子序列,不是子串。若沒有重復(fù)元素,則區(qū)間右邊擴(kuò)大,否則區(qū)間左邊縮小。 題目地址:https://leetcode-cn.com/probl...題目描述:給定一個(gè)字符串,請你找出其中不含有重復(fù)字符的 最長子串 的長度。 示例 1: 輸入: abcabcbb輸出: 3 解釋: 因?yàn)闊o重復(fù)字符...

    _DangJin 評論0 收藏0

發(fā)表評論

0條評論

Rocture

|高級講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<