问题描述

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:

输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:

输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:

输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

算法思想

本题采用动态规划的思路,创建一个数组noRepeatStr,它的下标为k,表示以k为起点的最长无重复子串的长度。然后我们就要从倒数第二个元素开始,从后往前依次计算某个元素为起点的最长无重复子串的长度,进入到循环后,把该元素与它的后面元素进行比较,一直比较到下一个元素加上其无重复子串的长度的位置,1.如果比较过程中有元素与该元素相等,则其无重复子串的长度为两个元素的下标之差。2.如果一直比较到下一个元素加上其无重复子串的长度的位置,则其最长无重复子串的长度等于下一个元素的最长无重复子串的长度+1。最后找到整个字符串的无重复字符的最长子串的长度即可。

代码实现

public int lengthOfLongestSubstring(String s) {int result=0;int length=s.length();int noRepeatStr[]=new int[length+10];  //下标为k,表示以k为起点的最长无重复子串的长度for(int i=0;i<s.length();i++){noRepeatStr[i]=1;          //初始化数组}//从倒数第二个元素开始,依次计算某个元素为起点的最长无重复子串的长度for(int i=length-2;i>=0;i--){int j;//把该元素与它的后面元素进行比较,一直比较到下一个元素加上其无重复子串的长度的位置//1.如果比较过程中有元素与该元素相等,则其无重复子串的长度为两个元素的下标之差//2.如果一直比较到下一个元素加上其无重复子串的长度的位置,则其最长无重复子串的长度//等于下一个元素的最长无重复子串的长度+1for(j=i+1;j<=i+noRepeatStr[i+1];j++){if(s.charAt(i)==s.charAt(j)){noRepeatStr[i]=j-i;break;}}if(j==i+noRepeatStr[i+1]+1){noRepeatStr[i]=noRepeatStr[i+1]+1;}}//在noRepeatStr数组中找到最长的无重复子串result=noRepeatStr[0];for(int i=0;i<s.length();i++){if(result<noRepeatStr[i]){result=noRepeatStr[i];}}return result;}

leetcode题解3-无重复字符的最长子串相关推荐

  1. 刻意练习:LeetCode实战 -- Task16. 无重复字符的最长子串

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  2. LeetCode Algorithm 3. 无重复字符的最长子串

    3. 无重复字符的最长子串 Ideas 这题有点KMP那味了. 首先定义三个变量: left:-1,当前处理字符串长度的左索引的前一位 res:0,最长子串长度 idx:{},最长子串中每个字符出现的 ...

  3. 【Leetcode 3】无重复字符的最长子串

    题目描述 2020年8月25日更新 一次遍历 思路: (1)一次遍历,用list存放遍历的连续不重复的子串,当遍历到重复的字符时,用index()方法获得list当中重复字符a的索引,然后将list重 ...

  4. LeetCode刷题——无重复字符的最长子串

    目录 一.题目描述 二.题解 三.源码 一.题目描述 二.题解 三.源码 class Solution(object):def lengthOfLongestSubstring(self, s):&q ...

  5. leetcode算法题--无重复字符的最长子串

    题目地址: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ https://leetc ...

  6. LeetCode题库整理【Java】—— 3 无重复字符的最长子串

    LeetCode题库整理[Java] ## 3 无重复字符的最长子串 题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" ...

  7. LeetCode 每日一题 3. 无重复字符的最长子串

    LeetCode 每日一题 3. 无重复字符的最长子串   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客 本文原创 ...

  8. (LeetCode刷题)Day03 无重复字符的最长子串

    无重复字符的最长子串 [3. Longest Substring Without Repeating Characters](https://leetcode.com/problems/longest ...

  9. 【LeetCode】无重复字符的最长子串【滑动窗口法】

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...

  10. LeetCode 3. 无重复字符的最长子串(滑动窗口+哈希)

    1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...

最新文章

  1. 训练三层BP神经网络实现异或运算 Python 代码实现
  2. 关于SQLServer2000的全文检索使用心得
  3. 关于Zigbee的常识
  4. qt 拖拽 修改大小
  5. 中科燕园GIS外包案例之五---地下管线GIS管理信息系统
  6. PaddlePaddle应用于百度视觉技术的工程实践
  7. 《此生未完成》痛句摘抄(3)
  8. 读书笔记_中国期货市场量化交易(李尉)05
  9. redis 所有模糊key 查询_写完这篇Redis由浅入深剖析快自闭了!
  10. 全网最全 Java 日志框架适配方案!还有谁不会?
  11. DICOM医学图像处理:基于DCMTK工具包学习和分析worklist
  12. `Shell`高级编程 Day02 —— Shell脚本初步入门
  13. 怎么查询电脑的磁盘序列号和各种硬件信息(Windows系统)
  14. npm ERR! code ETIMEDOUTnpm ERR! syscall connectnpm ERR! errno ETIMEDOUTnpm ERR! network request t
  15. 红旗河工程,南水北调西线工程,藏水入疆工程三合一
  16. 同步110序列检测电路
  17. 网络标准(从一类线到八类线)
  18. 内存泄露解决记录——窗口资源释放
  19. 第16课 闪电网络(Lightning Network) 之 HTLC
  20. dns辅服务器未响应是网卡受损,DNS服务器未响应一键修复教程

热门文章

  1. 马斯克扎心了!猎鹰重型火箭核心助推器运输过程中坠海
  2. 雅迪发布高端智能电动车G5 这个售价真的会有人买吗?
  3. 疑似一加7渲染图曝光:弹出式自拍镜头+高颜值渐变配色
  4. 马化腾:5G技术可以影响甚至重构整个互联网服务形态
  5. 根文件系统定制【ZT】
  6. python+appium自动化测试-重复执行测试用例
  7. 面向对象,面向服务,面向组件三种编程模式有什么区别
  8. php png缩放,PHP实现对png图像进行缩放的方法(支持透明背景)
  9. 安卓增删改查用sql语句号码_详解Android中一些SQLite的增删改查操作
  10. 【IDEA】IDEA 设置 字体 可以滚轮 改变大小