题目:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
算法:
方法一:
class Solution {
public int lengthOfLongestSubstring(String s) {
int n = s.length(), ans = 0;
Map<Character, Integer> map = new HashMap<>();
for (int end = 0, start = 0; end < n; end++) {
char alpha = s.charAt(end);
if (map.containsKey(alpha)) {
start = Math.max(map.get(alpha), start);
}
ans = Math.max(ans, end - start + 1);
map.put(s.charAt(end), end + 1);
}
return ans;
}
}
方法二:
class Solution {
public int lengthOfLongestSubstring(String s) {
int max=0;
int start=0;
for(int i=0;i<s.length();i++)
{
for(int j=start;j<i;j++)
{
if(s.charAt(i)==s.charAt(j))
start=j+1;
}
if(max<i-start+1)
max=i-start+1;
}
return max;
}
方法三:
class Solution {
public int lengthOfLongestSubstring(String s) {
char[] ss=s.toCharArray();
if(s.length()==0)
return 0;
int maxsize=1,start=0,end=0,same=0;
int have=0;
for(int i=1;i<ss.length;i++)
{
have=0;
for(int j=start;j<=end;j++)
{
if(ss[i]==ss[j])
{
have=1;
same=j;
}
}
if(have==1)
{
start=same+1;
}
end++;
if((end-start+1)>maxsize)
maxsize=end-start+1;
}
return maxsize;
}
}
提交记录
提交时间 | 提交结果 | 执行用时 | 内存消耗 | 语言 |
---|---|---|---|---|
2 天前 | 通过 | 29 ms | 39.9 MB | Java |
2 天前 | 通过 | 7 ms | 38 MB | Java |
2 天前 | 通过 | 18 ms | 38.4 MB | Java |