当前位置:网站首页>longest substring without repeating characters
longest substring without repeating characters
2022-08-09 06:33:00 【In the history of the strongest disciple】
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3.
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"
,所以其长度为 1.
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke"
,所以其长度为 3.
示例 4:
输入: s = "" 输出: 0
实现代码: (双指针)
public class Test23 {
public int getMaxSubStr(String subStr){
if(subStr.equals("")){
return 0;
}
HashSet<Character> hashSet = new HashSet<>();
int returnObject = 0;
for(int i=0;i<subStr.length();i++){
hashSet.add(subStr.charAt(i));
for(int j=i+1;j<subStr.length();j++){
//如果hashSet 中有字符,
if(hashSet.contains(subStr.charAt(j))){
break;
}
hashSet.add(subStr.charAt(j));
}
returnObject = Math.max(hashSet.size(),returnObject);
hashSet.removeAll(hashSet);
}
return returnObject;
}
public static void main(String[] args) {
String s = "pwwkew";
System.out.println("s:"+s+",return:"+new Test23().getMaxSubStr(s));
}
}
实现代码(滑动窗口)
/*
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3.
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1.
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3.
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串.
示例 4:
输入: s = ""
输出: 0
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
*/
import java.util.HashSet;
import java.util.Set;
public class Test23 {
/*public int getMaxSubStr(String subStr){
if(subStr.equals("")){
return 0;
}
HashSet<Character> hashSet = new HashSet<>();
int returnObject = 0;
for(int i=0;i<subStr.length();i++){
hashSet.add(subStr.charAt(i));
for(int j=i+1;j<subStr.length();j++){
//如果hashSet 中有字符,
if(hashSet.contains(subStr.charAt(j))){
break;
}
hashSet.add(subStr.charAt(j));
}
returnObject = Math.max(hashSet.size(),returnObject);
hashSet = new HashSet<>();
}
return returnObject;
}*/
public int getMaxSubStr2(String subStr){
HashSet<Character> hashSet = new HashSet<>();
int returnObject = 0;
int rk =0 ;
for(int i=0;i<subStr.length();i++){
if(i!=0){
hashSet.remove(subStr.charAt(i-1));
}
for(int j=rk;j<subStr.length();j++){
//如果hashSet 中有字符,
if(hashSet.contains(subStr.charAt(j))){
break;
}
hashSet.add(subStr.charAt(j));
rk++;
}
returnObject = Math.max(hashSet.size(),returnObject);
}
return returnObject;
}
public int lengthOfLongestSubstring(String s) {
// 哈希集合,记录每个字符是否出现过
Set<Character> occ = new HashSet<Character>();
int n = s.length();
// 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
int rk = -1, ans = 0;
for (int i = 0; i < n; ++i) {
if (i != 0) {
// 左指针向右移动一格,移除一个字符
occ.remove(s.charAt(i - 1));
}
while (rk + 1 < n && !occ.contains(s.charAt(rk + 1))) {
// 不断地移动右指针
occ.add(s.charAt(rk + 1));
++rk;
}
// 第 i 到 rk 个字符是一个极长的无重复字符子串
ans = Math.max(ans, rk - i + 1);
}
return ans;
}
public static void main(String[] args) {
//String s = "dvdf";
String s = "acdddskwleod";
Test23 test23 = new Test23();
System.out.println("s:"+s+",return:"+test23.getMaxSubStr2(s));
System.out.println(test23.lengthOfLongestSubstring(s));
}
}
执行结果:
边栏推荐
猜你喜欢
推进产教融合 赋能教育创新发展 | 华云数据荣获“企业贡献奖”
Redis 2 - 高级
输入框最前面添加放大镜&&background-image和background-color冲突问题
Gao Zelong, a famous digital collection expert and founder of the Digital Collection Conference, was interviewed by China Entrepreneur Magazine
DevNet: Deviation Aware Networkfor Lane Detection
Use baidu EasyDL intelligent bin
idea中PlantUML插件使用
pdf加密、找回密码
网络学习总结
IQ Products巨细胞病毒CMV感染检测试剂盒的特征和应用
随机推荐
Introduction of convenient functions and convenient shortcut keys of vs tomato assistant
按图搜索1688商品接口(item_search_img-按图搜索1688商品(拍立淘接口)代码对接教程
P7阿里面试题2020.07 之滑动窗算法(阿里云面试)
el-table缓存数据
运算放大器(OPA)超详细参数讲解-运放---以及8个型号的运算放大器分析对比
SIGINT,SIGKILL,SIGTERM信号区别,各类信号总结
static静态关键字和继承
Qt 学习(三) —— Qt 模块
leetcode 之 零移位
ByteDance Interview Questions: Mirror Binary Tree 2020
uniapp实现防抖搜索
Error jinja2.exceptions.UndefinedError: 'form' is undefined
锁执行的过程
P6阿里机试题之2020 斐波那契数
Unity C# 委托——事件,Action,Func的作用和区别
中英文说明书丨TRC 交替醇(Catalogue NumberA575760)
Simple to use Lambda expressions
pdf加密、找回密码
网络学习总结
默默重新开始,第一页也是新的一页