本文始发于个人公众号:TechFlow
今天和大家聊的问题叫做最长不重复子串,这道题很有意思,我们先来看题面:
Given a string, find the length of the longest substring without repeating characters.
翻译
题目只有一句话:给定一个字符串,要求返回不包含重复字符的最长子串的长度。
样例
Example 1:
Input: “abcabcbb”
Output: 3
Explanation: The answer is “abc”, with the length of 3.
Example 2:Input: “bbbbb”
Output: 1
Explanation: The answer is “b”, with the length of 1.
Example 3:Input: “pwwkew”
Output: 3
Explanation: The answer is “wke”, with the length of 3.
Note that the answer must be a substring, “pwke” is a subsequence and not a substring.
分析
我们先从最简单的方法开始,最容易想到的算法就是暴力枚举。我们可以遍历出这个字符串当中所有的子串,之后再判断这个子串当中有没有出现重复的元素。如果没有重复的元素,那么我们就更新答案。
在开始编码之前,我们先仔细观察样例.
我们可以计算出这种算法的复杂度,假设字符串长度是n,那么我们它的所有子串应该有 C n 2 = n ( n − 1 ) 2 C_n^2=\frac{n(n-1)}{2} Cn2=2n(n−1)<