当前位置:网站首页>Leetcode.3 无重复字符的最长子串——超过100%的解法
Leetcode.3 无重复字符的最长子串——超过100%的解法
2022-07-06 09:21:00 【李孛欢】
题目:给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
示例1:
输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是"abc",所以其长度为 3。
输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1
代码如下:
public int lengthOfLongestSubstring(String s) {
if(s == null || s.equals("")){
return 0;
}
//以i结尾往左推多远不重复 (考虑a上次出现的位置以及i-1能推多远)
char[] chars = s.toCharArray();
int n = chars.length;
//0-255的ASCII码 用256长度数组能表示所有字符 ASCii码一个字节 最长256 不过目前是定义了128个字符
//map[i] = v 代表i这个ascii码上次出现在v位置
//char字符放入map数组中会自动转化为int类型 其值就是char字符的ascii码值 比如'a'就是97
int[] map = new int[128];
for(int i = 0; i < map.length; i++){
map[i] = -1;//代表所有字符都在-1位置出现过
}
int ans = 1;//初始答案
int pre = 1;//上一个位置向左推了多长(包括自己)
map[chars[0]] = 0;//第一个字符在
for(int i = 1; i < n; i++){
//考虑字符char[i]上一次出现的位置
//例如adcba 01234那么长度就是字符char[i]现在的位置i减去上一次位置map[char[i]]
// 4 - 0 = 4 也就是dcba
int p1 = i -map[chars[i]];
//考虑前一个位置向左推了多少 加上自己 就是自己能推的位置
int p2 = pre + 1;
//取二者最小值就是现在位置能向前推的长度
int cur = Math.min(p1,p2);
//取所有答案的最大值
ans = Math.max(ans,cur);
//后面继续循环,所以更新pre 和char[i]上一次出现的位置
pre = cur;
map[chars[i]] = i;
}
return ans;
}
主要的思想还是动态规划,考虑的是以i结尾的字符能够往前推多远,这与前一个字符能往前推多远有关,用一个数组map存储该字符上次出现的位置,初始化为-1,是为了在计算距离时,计算式子统一。
边栏推荐
- C language Getting Started Guide
- View UI Plus 发布 1.1.0 版本,支持 SSR、支持 Nuxt、增加 TS 声明文件
- MySQL limit x, -1 doesn't work, -1 does not work, and an error is reported
- TYUT太原理工大学2022数据库大题之分解关系模式
- 最新坦克大战2022-全程开发笔记-1
- 1.C语言矩阵加减法
- Rich Shenzhen people and renting Shenzhen people
- MySQL中count(*)的实现方式
- View UI Plus 發布 1.3.1 版本,增强 TypeScript 使用體驗
- IPv6 experiment
猜你喜欢
(ultra detailed onenet TCP protocol access) arduino+esp8266-01s access to the Internet of things platform, upload real-time data collection /tcp transparent transmission (and how to obtain and write L
受检异常和非受检异常的区别和理解
1.初识C语言(1)
Questions and answers of "basic experiment" in the first semester of the 22nd academic year of Xi'an University of Electronic Science and technology
Design a key value cache to save the results of the most recent Web server queries
3.输入和输出函数(printf、scanf、getchar和putchar)
5.函数递归练习
TYUT太原理工大学2022数据库大题之数据库操作
Inheritance and polymorphism (Part 2)
(super detailed II) detailed visualization of onenet data, how to plot with intercepted data flow
随机推荐
8. C language - bit operator and displacement operator
2.C语言矩阵乘法
西安电子科技大学22学年上学期《基础实验》试题及答案
2.C语言初阶练习题(2)
【毕业季·进击的技术er】再见了,我的学生时代
Conceptual model design of the 2022 database of tyut Taiyuan University of Technology
ABA问题遇到过吗,详细说以下,如何避免ABA问题
View UI plus releases version 1.1.0, supports SSR, supports nuxt, and adds TS declaration files
TYUT太原理工大学2022数据库大题之数据库操作
甲、乙机之间采用方式 1 双向串行通信,具体要求如下: (1)甲机的 k1 按键可通过串行口控制乙机的 LEDI 点亮、LED2 灭,甲机的 k2 按键控制 乙机的 LED1
[the Nine Yang Manual] 2018 Fudan University Applied Statistics real problem + analysis
Alibaba cloud microservices (III) sentinel open source flow control fuse degradation component
受检异常和非受检异常的区别和理解
最新坦克大战2022-全程开发笔记-2
C语言入门指南
4.二分查找
TYUT太原理工大学往年数据库简述题
MySQL Database Constraints
Atomic and nonatomic
C语言实现扫雷游戏(完整版)