当前位置:网站首页>leetcode 剑指 Offer 48. 最长不含重复字符的子字符串
leetcode 剑指 Offer 48. 最长不含重复字符的子字符串
2022-07-30 08:52:00 【kt1776133839】
题目描述:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
样例:
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
提示:
s.length <= 40000
解题思路:
动态规划:
状态定义: 设动态规划列表 dp ,dp[j] 代表以字符 s[j] 为结尾的 “最长不重复子字符串” 的长度。
转移方程: 固定右边界 j ,设字符 s[j] 左边距离最近的相同字符为 s[i] ,即 s[i]=s[j]。
当 i<0 ,即 s[j] 左边无相同字符,则 dp[j]=dp[j−1]+1;
当 dp[j−1]<j−i,说明字符 s[i] 在子字符串 dp[j−1]区间之外 ,则 dp[j]=dp[j−1]+1;
当 dp[j−1]≥j−i,说明字符 s[i] 在子字符串 dp[j−1] 区间之中 ,则 dp[j] 的左边界由 s[i]决定,即 dp[j]=j−i ;
当 i<0 时,由于 dp[j−1]≤j恒成立,因而 dp[j−1]<j−i恒成立,因此分支 1. 和 2. 可被合并。

返回值: max(dp)\max(dp)max(dp) ,即全局的 “最长不重复子字符串” 的长度。
Java程序:
class Solution {
public int lengthOfLongestSubstring(String s) {
Map<Character, Integer> dic = new HashMap<>();
int res = 0, tmp = 0;
for(int j = 0; j < s.length(); j++) {
int i = dic.getOrDefault(s.charAt(j), -1); // 获取索引 i
dic.put(s.charAt(j), j); // 更新哈希表
tmp = tmp < j - i ? tmp + 1 : j - i; // dp[j - 1] -> dp[j]
res = Math.max(res, tmp); // max(dp[j - 1], dp[j])
}
return res;
}
}
边栏推荐
- 积分简明笔记-第一类曲线积分的类型
- Concise Notes on Integrals - Types of Curve Integrals of the Second Kind
- 回板后,处理器不启动,怎么办?
- 七大排序之直接选择排序
- Activating data potential Amazon cloud technology reshapes cloud storage "family bucket"
- 积分专题笔记-与路径无关条件
- Windows 下安装 MySQL
- MySQL之COUNT性能到底如何?
- 剖析SGI STL空间配置器(_S_refill内存块填充函数)
- Unreal Engine Graphic Notes: could not be compiled. Try rebuilding from source manually. Problem solving
猜你喜欢

聊聊 MySQL 事务二阶段提交

How to implement Golang DES encryption and decryption?

20220728 Use the bluetooth on the computer and the bluetooth module HC-05 of Huicheng Technology to pair the bluetooth serial port transmission

Golang DES 加解密如何实现?

TreeSet解析

如何使用 Jmeter 进行抢购、秒杀等场景下,进行高并发?

Apache DolphinScheduler's new generation of distributed workflow task scheduling platform in practice - Part 1

PyTorch安装及环境配置(Win10)

负电压电路(原理分析)

电源完整性基础知识
随机推荐
Concise Notes on Integrals - Types of Curve Integrals of the Second Kind
企业数字化建设,自研还是采购?
电路分析:运放和三极管组成的恒流源电路
qsort 函数的使用及其模拟实现
conda 导出/导出配置好的虚拟环境
js柯里化
宝塔搭建DM企业建站系统源码实测
MySQL之COUNT性能到底如何?
剖析SGI STL空间配置器(空间配置器的重要性和重要成员及函数)
SRAM与DRAM的区别
MySQL数据库题库
日志导致线程Block的这些坑,你不得不防
Network/Information Security Top Journal and Related Journals Conference
How to use Jmeter to carry out high concurrency in scenarios such as panic buying and seckill?
Circuit analysis: constant current source circuit composed of op amp and triode
团队级敏捷真的没你想的那么简单
积分简明笔记-第二类曲线积分的类型
Concise Notes on Integrals - Types of Curve Integrals of the First Kind
Kotlin value class - value class
九九乘法表