给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
本题关键需要注意,我们寻找到第一个不重复字串的时候,当我们去除开始的第一个字符,剩余的字符串仍然是不重复的。因此我们可以在进行遍历的时候,没有必要对字符串进行重新的进行遍历,只需要将之前寻找到的不重复子串的最后一个字符向后移动并进行验证即可,为了提升效率,引入HashSet。
代码如下:
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class first {
public static void main(String[] args) {
String s;
Scanner scanner = new Scanner(System.in);
s = scanner.nextLine();
Set<Character> temp = new HashSet<Character>();
int num = s.length();
int flag = -1, result = 0;
for (int i = 0; i < num; i++) {
if (i != 0) {
temp.remove(s.charAt(i - 1));
}
while (flag + 1 < num && !temp.contains(s.charAt(flag + 1))) {
temp.add(s.charAt(flag + 1));
++flag;
}
result = Math.max(result, flag - i + 1);
}
System.out.println(result);
}
}