前言
今天leecode上看到一個題目,分享給大家,我也給出瞭解答,大家可以參考下,這種解法還可以進行優化,比如採用雜湊演算法代替比較。
題目描述
給定一個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 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 協議》,轉載必須註明作者和本文連結