内容纲要
题目
给定一个字符串 str
,请你找出其中不含有重复字符的 最长子串 的长度
提示
0 <= s.length <= 5 * 104
s
由英文字母、数字、符号和空格组成
注意
你的答案必须是 子串 的长度,而不是一个子序列。
思路
使用Set集合的元素不重复的特性来解题,每一次对字符串的字符进行判定,如果不存在Set中则加入,存在则删除开始下一轮判定。全程思路在代码演示中给出。
/**
* @author: LoungeXi
**/
public class Solution {
public int lengthOfLongestSubstring(String str) {
// 利用 set 的不可重复元素特点进行判断
Set<Character> set = new HashSet<>();
int result=0;
int leftPointer=0;
int rightPointer=0;
// 右指针还没到字符串尾部时继续循环
while(rightPointer<str.length()){
// 得到右指针当前指向的字符
if(!set.contains(str.charAt(rightPointer))){
// 如果 set 中不含有该字符则加入该字符
set.add(str.charAt(rightPointer));
// 右指针自增;
rightPointer++;
// 更新结果
result= Math.max(result,set.size());
}else {
// 如果 set 中含有该字符则删除左指针指向的字符,因为程序一开始指针指向的都是传入字符串的第一个字符,删除后自增即为开始下一轮判定
// 如果使用两个for循环来解题 左指针相当于外循环的索引
set.remove(str.charAt(leftPointer));
// 左指针自增;
leftPointer++;
}
}
return result;
}
}