给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
【给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度】输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
package dance;
import java.util.HashMap;
import java.util.Map;
public class Demo1 { public static void main(String[] args) {int len = lengthOfLongestSubstring("abcabcbb");
// ""System.out.println(len);
} public static int lengthOfLongestSubstring(String s) {
/*
* 输入: "abcabcbb" 输出: 3
* 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
*/// 最长字串长度
int maxLen = 0;
// 滑动窗口起始指针位置
int viewStart = 0;
// 滑动窗口结束指针位置
int viewEnd = 0;
// 字符及其最后出现位置的散列表
Map chTable = new HashMap();
for (int i = 0;
i < s.length();
i++) {
char ch = s.charAt(i);
// 字符最后出现索引下标
if (chTable.get(ch) != null) {
// 出现过
if(chTable.get(ch) >= viewStart) {
/*
* 这种情况不应该更换起始位置
*kI
*k w w k e w
*/
viewStart = chTable.get(ch) + 1;
}
}// 尾指针移动
viewEnd = i;
// 字符最后出现索引下标存储
chTable.put(ch, i);
// 视口长度
int viewLen = viewEnd - viewStart + 1;
// 维护最大长度
maxLen = maxLen > viewLen ? maxLen : viewLen;
}return maxLen;
}}
推荐阅读
- 一个人的旅行,三亚
- 一个小故事,我的思考。
- 一个人的碎碎念
- 七年之痒之后
- 我从来不做坏事
- 异地恋中,逐渐适应一个人到底意味着什么()
- 迷失的世界(二十七)
- live|live to inspire 一个普通上班族的流水账0723
- 遗憾是生活的常态,但孝顺这件事,我希望每一个人都不留遗憾
- NO.38|NO.38 我不是嫁不出去,而是不想嫁