leetcode打卡(二)---- Longest Substring Without Repeating Characters
阿新 • • 發佈:2018-12-10
題目描述
Given a string, find the length of the longest substring without repeating characters. 簡單來說就是找到字串中最短的子串
拿到題目第一感覺就是遍歷所有子串,然後求出最大長度。但這種方法不用想就知道時間複雜度非常高。不適合做這道題。然後去網上找了一些資料,在根據自己的理解來相處了一種還行的方法。 廢話少說,上程式碼
int lengthOfLongestSubstring(string s) {
int index[128] = {0};
int max = 0;
int j = 0;
for (int i = 0; i < s.size(); ++i) {
if(index[s[i]] && index[s[i]] > j) {
j = index[s[i]];
}
if (max < i - j + 1) {
max = i - j + 1;
}
index[s[i]] = i + 1;
}
return max > current_length ? max : current_length;
}
這程式碼很多地方都是比較好理解的,陣列index
是用來記錄字元的下標。max
是最大子串的長度。主要就是給j
賦值那一段程式碼。這裡稍微解釋一下:
首先
i - j + 1
是用來計運算元串的長度的。所以我們必須保證s[j, i]
中沒有重複的元素。所以當index[s[i]]>0
時,說明在s[j, i]
中存在相同字元,即s[i]
, 所以我們必須將j移動到s[i]上一次出現的下標,即index[s[i]]
, 所以j = index[s[i]]