Leecode3
题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
分析
这道题啊原本一看到,我脑中就是直接想好了暴力法代码如何了。但是老师所不能用暴力法。所以我只能另寻他路。通过读题,我们可以知道他寻找得是不包含重复字符得子串,不是子序列,所以为了由此可以想到在字符串中每次第一次发现两个相同字符时两字符中间夹着得就是个无重复字符的子串。所以由此可以通过不停在每个串中找两个重复字符然后看两者中间夹得子串得长度。寻找最大值。
解法
通过上面得分析求得对应的代码,
代码:
public class Solution {
public int LengthOfLongestSubstring(string s)
{
int max = 0;
int[] a = new int[256];
int top = 0;
for (int i = 0; i < s.Length; ++i)
{
if (a[s[i]] > top)
{
if (i - top > max)
{
max = i - top;
}
top = a[s[i]];
}
a[s[i]] = i + 1;
}
if (s.Length<=1)
{
max =s.Length;
}
if (s.Length - top > max)
{
max = s.Length - top;
}
return max;
}
}
注意:当字符串长度小于等于1时不可能存在重复字符,应设立if判别语句单独讨论。
效果: