给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串 的长度。
一道leetcode原题:力扣
虽然是一个原题,但是面试官可能会出一个不同的变种,就是不输出最长的长度,而是输出最长子串的字符串,要注意听明白面试官的要求。
这里给出一个java版本的代码
import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;
import java.math.BigInteger;
import java.util.stream.Stream;
class Main {
public static void main(String[] args) {
// 处理输入
Scanner in = new Scanner(System.in);
String input_str = in.nextLine();
System.out.println(lengthOfLongestSubstring(input_str));
}
//注意看要求是返回最大长度还是最长子串本身
public static int lengthOfLongestSubstring(String s) {
if (s == null || s.length() < 1) {
return 0;
}
Set<Character> set = new HashSet<>();
// 无重复子串的右侧下标
int right = 0;
// 最长的长度
int ans = 0;
int n = s.length();
for (int i = 0; i < n; i ++) {
// i 就是左侧下标
if (i != 0) {
// 当不是第一个元素时,要把之前的元素删除掉
set.remove(s.charAt(i - 1));
}
while (right < n && !set.contains(s.charAt(right))) {
// 当不存在重复字符时加入集合中
set.add(s.charAt(right));
// 右侧下标前进
right ++;
}
// 遇见重复字符了,比较得到最长的子串长度
ans = Math.max(ans, right - i);
}
return ans;
}
}
华为OD 2023/2022 最新机试题及讲解,100%通过率。
Java: https://renjie.blog.csdn.net/article/details/127947829
Python: https://renjie.blog.csdn.net/article/details/127946125
C++: https://renjie.blog.csdn.net/article/details/126965954
Js: https://renjie.blog.csdn.net/article/details/128974467
C: https://renjie.blog.csdn.net/article/details/129190260
华为OD 2023/2022 最新机试题及讲解,100%通过率。
Java: https://renjie.blog.csdn.net/article/details/127947829
Python: https://renjie.blog.csdn.net/article/details/127946125
C++: https://renjie.blog.csdn.net/article/details/126965954
Js: https://renjie.blog.csdn.net/article/details/128974467
C: https://renjie.blog.csdn.net/article/details/129190260
华为OD 2023/2022 最新机试题及讲解,100%通过率。
Java: https://renjie.blog.csdn.net/article/details/127947829
Python: https://renjie.blog.csdn.net/article/details/127946125
C++: https://renjie.blog.csdn.net/article/details/126965954
Js: https://renjie.blog.csdn.net/article/details/128974467