给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
解答:
3.无重复字符的最长字串.pngJava
public class Solution {
public int lengthOfLongestSubstring(String s) {
if( s.length() == 0) {
return 0;
}
int max = 1 , cur = 0;
for (int i = 1; i < s.length(); i++) {
int j = cur;
// 检测窗口内是否有重复字符
while (j < i){
if (s.charAt(j) == s.charAt(i)) break;
j++;
}
// 如果窗口内无重复字符,扩大窗口
if(i == j){
max = Math.max((j - cur + 1), max);
}else{ // 滑动窗口
cur = j + 1;
}
}
return max;
}
}
Go
func lengthOfLongestSubstring(s string) int {
if len(s) == 0 {
return 0
}
cur, max := 0, 1
array := []rune(s)
for x, v:= range array{
y := cur
for x > y {
if array[y] == v {
break
}
y++
}
if x == y {
newMax := x - cur + 1
if newMax > max {
max = newMax
}
} else {
cur = y + 1
}
}
return max
}
网友评论