剑指 Offer 48. 最长不含重复字符的子字符串

Offer_48

题目详情

解法分析

解法一:动态规划+哈希表

package com.walegarrett.offer;

/**
* @Author WaleGarrett
* @Date 2021/2/8 20:52
*/ import java.util.HashMap; /**
* 题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
*/
public class Offer_48 {
public int lengthOfLongestSubstring(String s) {
if(s==null || s.length() == 0)
return 0;
int len = s.length();
int[] dp = new int[len];
HashMap<Character, Integer>map = new HashMap<>();
dp[0] = 1;
int result = 1;
map.put(s.charAt(0), 0);
for(int j=1;j<len;j++){
int i = map.getOrDefault(s.charAt(j),-1);
if(dp[j-1] >= j-i){
dp[j] = j-i;
}else{
dp[j] = dp[j-1] + 1;
}
map.put(s.charAt(j), j);
result = Math.max(result, dp[j]);
}
return result;
}
}

解法二:哈希表+线性遍历

/**
* 解法二:动态规划+线性遍历
*/
class Offer_48_2 {
public int lengthOfLongestSubstring(String s) {
if(s==null || s.length() == 0)
return 0;
int len = s.length();
int[] dp = new int[len];
HashMap<Character, Integer>map = new HashMap<>();
dp[0] = 1;
int result = 1;
map.put(s.charAt(0), 0);
for(int j=1;j<len;j++){
int i = j-1;
while(i>=0 && s.charAt(i) != s.charAt(j)){
i--;
}
if(dp[j-1] >= j-i){
dp[j] = j-i;
}else{
dp[j] = dp[j-1] + 1;
}
result = Math.max(result, dp[j]);
}
return result;
}
}

解法三:双指针+哈希表

/**

 * 解法二:双指针+哈希表
*/
class Offer_48_3 {
public int lengthOfLongestSubstring(String s) {
if(s==null || s.length() == 0)
return 0;
int len = s.length();
HashMap<Character, Integer>map = new HashMap<>();
int result = 1;
map.put(s.charAt(0), 0);
int i=-1;
for(int j=0;j<len;j++){
if(map.containsKey(s.charAt(j))){
i= Math.max(i,map.get(s.charAt(j)));
}
map.put(s.charAt(j), j);
result = Math.max(result, j-i);
}
return result;
}
}

剑指 Offer 48. 最长不含重复字符的子字符串 + 动态规划 + 哈希表 + 双指针 + 滑动窗口的更多相关文章

  1. 【Java】 剑指offer(48) 最长不含重复字符的子字符串

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字 ...

  2. 每日一题 - 剑指 Offer 48. 最长不含重复字符的子字符串

    题目信息 时间: 2019-07-02 题目链接:Leetcode tag: 动态规划 哈希表 难易程度:中等 题目描述: 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度 ...

  3. 剑指 Offer 48. 最长不含重复字符的子字符串

    题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 示例1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 & ...

  4. 剑指offer-面试题48-最长不含重复字符的子字符串-动态规划

    /* 题目: 最长不含重复字符的子字符串. */ /* 思路: f(i) = f(i-1) + 1,(未出现过当前字符,distance > f(i-1) distance,当前字符和上一次出现 ...

  5. 剑指offer——50最长不含重复字符和子字符串

    题目: 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.假设字符串中只包含’a~z”的字符.例如,在字符串“arabcacfr"中,最长的不含重复字符的子字符串 ...

  6. 剑指offer面试题48: 最长不含重复字符的子字符串

    Given a string, find the length of the longest substring without repeating characters.(请从子字符串中找出一个最长 ...

  7. 《剑指offer》面试题48. 最长不含重复字符的子字符串

    问题描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.   示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串 ...

  8. 《剑指offer》第四十八题(最长不含重复字符的子字符串)

    // 面试题48:最长不含重复字符的子字符串 // 题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子 // 字符串的长度.假设字符串中只包含从'a'到'z'的字符. #inclu ...

  9. 【Offer】[48] 【最长不含重复字符的子字符串】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.假设字符串中只包含'a'~'z'的字符.例如,在字符串&q ...

随机推荐

  1. fzu2204 7

    Problem Description n个有标号的球围成一个圈.每个球有两种颜色可以选择黑或白染色.问有多少种方案使得没有出现连续白球7个或连续黑球7个.  Input 第一行有多组数据.第一行T表 ...

  2. CF1466-C. Canine poetry

    CF1466-C. Canine poetry 题意: 给出一个字符串,这个字符串里面可能会包含多个回文子字符串.现在你可以任意修改这个字符串中的任意一个字符任意次数,问你最少多少操作数之后这个字符串 ...

  3. [整理] LRU 算法的实现方式

    目录 概念 方法选择 实现方案(基于LinkedHashMap) 改进方案 1.LRU-K 2.Two queue 3.Multi Queue(MQ) LRU类算法对比 LRU 在 Redis 中的应 ...

  4. POJ - 3665 icow

    Fatigued by the endless toils of farming, Farmer John has decided to try his hand in the MP3 player ...

  5. Leetcode(15)-三数之和

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...

  6. 深入 Python 解释器源码,我终于搞明白了字符串驻留的原理!

    英文:https://arpitbhayani.me/blogs/string-interning 作者:arpit 译者:豌豆花下猫("Python猫"公众号作者) 声明:本翻译 ...

  7. Ant-design-vue—— 表单输入框输入很卡问题

    参考:https://blog.csdn.net/weixin_43905402/article/details/106074435 我的问题:vue项目中使用ant-design-vue,表单中输入 ...

  8. set CSS style in js solutions All In One

    set CSS style in js solutions All In One css in js set each style property separately See the Pen se ...

  9. JavaScript interview Question - Create a Array with two papameters without using loop!

    JavaScript interview Question - Create a Array with two papameters without using loop! JavaScript - ...

  10. learning all in one

    learning learning all in one https://github.com/xgqfrms/learning/tree/gh-pages/GraphQL https://githu ...