leetcod【第二周】:检测输入字符串中的最长非重复子字符串长度
来源:互联网 发布:java lambda表达式详解 编辑:程序博客网 时间:2024/06/11 09:49
题名:Longest Substring Without Repeating Characters
问题描述:
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
问题分析:
这是一个计算字符串中最长非重复子字符串的问题,既然要考虑是否重复,那么一定存在字符串字符间的比较问题。所以,一开始先排除不需要进行字符比较的情况,即当字符串长度为0或1的时候,很明显最长非重复子字符串就是其本身,所以直接返回字符串长度即可。然后考虑需要进行比较的情况。如下图所示:
我们从第二个字符开始逐个遍历,每一轮当前字符与前面的无重复子字符串中的字符逐个比较,若不重复,那么当前的无重复子字符串就是前面的无重复子字符串加上当前的字符,并记录更新当前的最大无重复子字符串的长度记录。若重复,则与当前字符重复的字符,我们假设它是K,将会把之前的无重复子字符串分割成两部分,当接下来我们继续读取下一个字符,并将它拼接成无重复子字符串的时候,在K前面的无重复子字符串的长度已经不可能再增长(也就是不可能再比上一轮记录的无重复子字符串的长度大),而K后面的字符串的长度还有增长的空间(即有可能找到我们上一轮记录的最大无重复子字符串的长度更长的无重复子字符串),所以下一轮用作与当前字符比较的无重复子字符串应当从K的前一位开始,所以我们就可以得到如下的实现方法。
代码实现:
- leetcod【第二周】:检测输入字符串中的最长非重复子字符串长度
- 最长非重复连续子字符串
- 求字符串中的“最长重复子串”
- 求给定的某一个字符串中的最长的没有重复字符的子串的长度
- 【面试】字符串最长不重复子串长度。
- 字符串最长不含重复字符的子串长度
- 找出字符串的最长不重复子串,输出长度
- 找出字符串最长不重复子串,输出长度
- 找出字符串的最长不重复子串,输出长度
- 找出字符串的最长不重复子串,输出长度
- 查找字符串中无重复最长子串的长度
- 长度最长的重复字符串
- 最长无重复子字符串
- 查找最长重复子字符串
- 求两个字符串中的最长公共子串的长度
- 求字符串中的最长回文子串的长度
- 给定一个字符串,返回字符串中没有重复字符的最长子串的长度
- 给定一个字符串。求最长的无重复子字符串长度。
- 在O(1)时间复杂度删除链表节点
- Android Studio 环境搭建与Hello World
- 复杂数据类型的映射之枚举
- Kali Linux下安装wingIDE问题
- C++排序算法之冒泡排序、选择排序、直接插入排序
- leetcod【第二周】:检测输入字符串中的最长非重复子字符串长度
- eclipse插件——maven
- Linux服务器部署servlet以及jsp报JasperException错,c标签没有被编译,按照字符串输出
- 给图片加水印
- WebService的框架JWS、Axis和CXF 比较
- 熟悉一下JAVA语法
- 【LeetCode】two sum系列
- 技术流小感
- 关于JDBC和一些持久化框架SQL预编译的理解整理