1、题目描述
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串
来源:力扣(LeetCode)
2、算法
定义一个head,tail指向字符串开头 tail指针后移,判断tail位置所在的字符串是否在【head,tail】区间内
如果该区间内没有该元素,将该元素加入该区间,并且tail指针继续向后移,并更新最大值。
如果包含该元素,则head引用向后移,直至区间中不包含该元素。最后输出最大值。
3、源码
public static int lengthOfLongestSubstring(String s) {
int head=0;
int tail=0;
if(s.length()<2) {
return s.length();
}
int res=1;
while(tail<s.length()-1) {
tail++;
if(!s.substring(head,tail).contains(s.charAt(tail)+"")) {
res=Math.max(tail-head+1,res);
}else {
while(s.substring(head,tail).contains(s.charAt(tail)+""))
head++;
}
}
return res;
}