剑指 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. poj 1410 (没做出来,记得闲着没事看看这道题)

    听说这道题是个大大的坑题 结果wa了十多发,,,,还是没找到原因 #include<cstdio> #include<cmath> #include<algorithm& ...

  2. Codeforces Round #672 (Div. 2 B. Rock and Lever (位运算)

    题意:给你一组数,求有多少对\((i,j)\),使得\(a_{i}\)&\(a_{j}\ge a_{i}\ xor\ a_{j}\). 题解:对于任意两个数的二进制来说,他们的最高位要么相同要 ...

  3. Find a multiple POJ - 2356

    The input contains N natural (i.e. positive integer) numbers ( N <= 10000 ). Each of that numbers ...

  4. Educational Codeforces Round 94 (Rated for Div. 2) A. String Similarity (构造水题)

    题意:给你一个长度为\(2*n-1\)的字符串\(s\),让你构造一个长度为\(n\)的字符串,使得构造的字符串中有相同位置的字符等于\(s[1..n],s[2..n+1],...,s[n,2n-1] ...

  5. Codeforces 11D A Simple Task 统计简单无向图中环的个数(非原创)

    太难了,学不会.看了两天都会背了,但是感觉题目稍微变下就不会了.dp还是摸不到路子. 附ac代码: 1 #include<iostream> 2 #include<cstdio> ...

  6. HDU4578 Transformation(多标记线段树)题解

    题意: 操作有:\(1\).区间都加\(a\):\(2\).区间都乘\(a\):\(3\).区间都重置成\(a\):\(4\).询问区间幂次和\(\sum_{i=l}^rnum[i]^p(p\in\{ ...

  7. 机器学习入门实战——基于knn的airbnb房租预测

    数据读取 import pandas as pd features=['accommodates','bathrooms','bedrooms','beds','price','minimum_nig ...

  8. Monorepo All In One

    Monorepo All In One monorepos 只是一种思想,或设计模式,架构风格 https://trunkbaseddevelopment.com/monorepos/ Lerna h ...

  9. ::-webkit-scrollbar & hidden scrollbar

    ::-webkit-scrollbar & hidden scrollbar how to hidden ::-webkit-scrollbar *::-webkit-scrollbar { ...

  10. brew & apply2files bug

    brew & apply2files bug Error: Permission denied @ apply2files - /usr/local/lib/node_modules/npm/ ...