-
每日算法-无重复字符的最长子串
题目描述
给定一个字符串s
,请你找出其中不含有重复字符的 最长子串 的长度
示例1:
输入:s = "abcabcbb"
输出:3
解释:无重复字符的最长字串是"abc",所以长度为3。
示例2:
输入:s = "bbbbb"
输出:1
解释:无重复字符的最长字串是"b",长度为1。
示例3:
输入:s = ""
输出:0
解答详情
思路:先理解清楚字符串的子串和子数组的概念,子串是连续的,子数组可以不连续;该题本人根据ASCII码,利用字符的ASCII码记录上一个字符出现的位置,若遇到相同的字符,则更新统计子串长度的起始位置,并记录相应无重复字符子串的长度,获取其最大值。
class Solution {
public int lengthOfLongestSubstring(String s) {
int len = s.length();//字符串长度
if(len < 2) return len==1 ? 1 : 0;
int[] preStrIdx = new int[128];//128位的ASCII码
//利用字符的ASCII码记录上一个字符出现的位置
for(int i = 0 ; i < 128 ; i++)preStrIdx[i] = -1;//初始化
int res = 0;
int start = 0;
for(int i = 0 ; i < len ; i++){
int idx = s.charAt(i);//字符对应的ASCII码
start = Math.max(start,preStrIdx[idx]+1);//记录开始的位置
res = Math.max(res,i-start+1);
preStrIdx[idx] = i;//更新上一个字符的位置
}
return res;
}
}
出处:https://www.cnblogs.com/torima/p/15159353.html
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
数据库审计与智能监控:从日志分析到异
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比