博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程题—面试题48. 最长不含重复字符的子字符串
阅读量:2441 次
发布时间:2019-05-10

本文共 1464 字,大约阅读时间需要 4 分钟。

题目描述
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法1:滑动窗口

1、利用滑动窗口,如果当前遍历的字母不在已遍历的字符串中,则右指针加1,判断当前最大窗口和当前窗口的最大值为最终结果

2、如果窗口中存在该元素,则将 head 指针右移,直到窗口中不包含该元素;

class Solution {
public int lengthOfLongestSubstring(String s) {
if (s.length()==0) return 0; else if (s.length()==1) return 1; int res=1; int left=0; for(int i=1;i
解法2:利用hashmap实现滑动窗口

1、如果hashmap中没有当前的字符,将key,value加入

2、如果有的话,则计算长度,如果长度比刚才的结果大,则改变最大长度
3、将最左边的指针移到hashmap中重复字符的右边一位
4、第三步需要注意的是,如果左指针加1没有刚才的左指针大,则不进行移动,例如测试用例tmm2nx

import java.util.HashMap;class Solution {
public int lengthOfLongestSubstring(String s) {
int res=0; int head=0; HashMap
resmap = new HashMap
(); int i=0; for(i=0;i
head) {
//测试用例tmm2nxt head=resmap.get(s.charAt(i))+1; } resmap.remove(s.charAt(i)); resmap.put(s.charAt(i), i); } } return Math.max(i-head, res); }}
解法3、动态规划

参考:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/solution/pythonti-jie-shuang-100-dp-hua-dong-chuang-kou-shu/

你可能感兴趣的文章
SICP 练习 1.3
查看>>
pg 数据库HA 启动脚本的两个假设
查看>>
Linux 4.5 亮点特性
查看>>
PostgreSQL 源码解读(44)- 查询语句#29(等价类相关数据结构)
查看>>
FreeBSD安装文件系统(转)
查看>>
Linux程序应用开发环境和工具经验谈(转)
查看>>
NetBSD 指导手册(转)
查看>>
打造FreeBSD桌面系统(2)(转)
查看>>
Windows 98 注册表应用的30个实例(转)
查看>>
为 Windows 98 的注册表数据库减肥(转)
查看>>
Windows Vista Beta2 中文版优化归类(转)
查看>>
Oracle 9i管理工具的使用(转)
查看>>
在Oracle数据库10g中跟踪SQL(转)
查看>>
Oracle 10g 新特性之虚拟专用数据库(转)
查看>>
深刻理解Oracle数据库的启动和关闭(转)
查看>>
将Oracle 10g内置的安全特性用于PHP(转)
查看>>
骇客攻击:跳板攻击与防御(1)(转)
查看>>
在access中增加农历支持模块. (转)
查看>>
增加一个判断内存变量存在的函数 (转)
查看>>
JSR227:J2EE数据绑定及数据访问标准 (转)
查看>>