1. 程式人生 > >leetcode打卡(二)---- Longest Substring Without Repeating Characters

leetcode打卡(二)---- Longest Substring Without Repeating Characters

題目描述

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]]