leetcode 之無重複字元的最長子串

Dennis_Ritchie發表於2020-06-03

前言

今天leecode上看到一個題目,分享給大家,我也給出瞭解答,大家可以參考下,這種解法還可以進行優化,比如採用雜湊演算法代替比較。

leetcode 之無重複字元的最長子串

題目描述

給定一個字串,請你找出其中不含有重複字元的 最長子串 的長度。

示例 1:

輸入: “abcabcbb”
輸出: 3
解釋: 因為無重複字元的最長子串是 “abc”,所以其長度為 3。
示例 2:

輸入: “bbbbb”
輸出: 1
解釋: 因為無重複字元的最長子串是 “b”,所以其長度為 1。
示例 3:

輸入: “pwwkew”
輸出: 3
解釋: 因為無重複字元的最長子串是 “wke”,所以其長度為 3。
請注意,你的答案必須是 子串 的長度,”pwke” 是一個子序列,不是子串。

答案解答

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>


int lengthOfLongestSubstring(char *s) {
    int len = strlen(s);
    char *t = s, *p_start = s, *temp;
    int max_len = 0;
    int t_len = 0;
    char c;
    while (t < (s + len)) {
        if (t == s) {
            ++t;
            ++t_len;
            continue;
        }

        c = *t;
        temp = t;
        while (--temp >= p_start && *temp != c);
        if (temp >= p_start) {
            p_start = temp + 1;
            if (t_len > max_len) {
                max_len = t_len;
            }
            t_len = t - p_start+1;
            t++;
        } else {
            ++t_len;
            ++t;
        }
    }
    if (t_len > max_len) {
        max_len = t_len;
    }
    return max_len;
}

int main() {
    char *input = "hello";
    printf("%d\n", lengthOfLongestSubstring(input));
    return 0;
}

本作品採用《CC 協議》,轉載必須註明作者和本文連結

如果有不懂的地方,可以加我的qq:1174332406,或者是微信:itshardjs

相關文章