当前位置:网站首页>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;
}
}
边栏推荐
- Apache DolphinScheduler's new generation of distributed workflow task scheduling platform in practice - Part 1
- HCIP - MPLS VPN experiment
- TreeSet parsing
- 20220728使用电脑上的蓝牙和汇承科技的蓝牙模块HC-05配对蓝牙串口传输
- 涛思 TDengine 2.6+优化参数
- Devops和低代码的故事:螳螂捕蝉,黄雀在后
- 如何使用 Jmeter 进行抢购、秒杀等场景下,进行高并发?
- The difference between DDR, GDDR, QDR
- ACL 2022 | Introduce angular margin to construct comparative learning objectives and enhance text semantic discrimination ability
- Network/Information Security Top Journal and Related Journals Conference
猜你喜欢
随机推荐
如何使用 Jmeter 进行抢购、秒杀等场景下,进行高并发?
Unreal Engine Graphic Notes: could not be compiled. Try rebuilding from source manually. Problem solving
How to avoid CMDB becoming a data island?
读书笔记:《这才是心理学:看穿伪心理学的本质(第10版)》
剖析SGI STL空间配置器(一 、辅助接口函数)
els 方块向左移动
函数式接口&Lambda表达式——简单应用笔记
It is said that FPGA is high-end, what can it do?
TreeSet解析
一文读懂二十种开关电源拓扑结构
How to implement Golang DES encryption and decryption?
Two solutions for Excel xlsx file not supported
企业数字化建设,自研还是采购?
研发转至FAE(现场应用工程师),是否远离技术了?有前途吗?
利用R语言读取csv文件入一个数据框,然后查看各列的属性。
SRAM与DRAM的区别
仿牛客网项目第一章:开发社区首页(详细步骤和思路)
剖析SGI STL空间配置器(allocate内存分配函数)
都说FPGA高端,它到底能干啥?
编程界的“躲猫猫”比赛 | 每日趣闻









