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

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

示例 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; }}

    推荐阅读