给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 示例 2: 示例 3: 滑动窗口
题目
输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
解题思路
将每个元素加入lists 判断lists是否有重复元素 若有则缩小左窗口,不管有没有重复的元素 都增加右窗口
,取得lists中没有重复元素的最大size
这里判断有没有重复的元素,采用了笨方法,将list转化为set取容器大小作比较。代码
class Solution { public static int lengthOfLongestSubstring(String s) { //字符串为空返回0 if(s.length()==0){ return 0; } //只有一个元素 返回1 if (s.length() == 1) { return 1; } int max = Integer.MIN_VALUE; int i = 0; int j = 0; char[] chars = s.toCharArray(); List<Character> lists = new ArrayList<>(); lists.add(chars[0]); //将每个元素加入lists 判断lists是否有重复元素 若有则缩小左窗口 //不管有没有重复的元素 都增加右窗口 //取得lists中没有重复元素的最大size for (int k = 1; k < chars.length; k++) { lists.add(chars[k]); //存在重复 if (checkIsRepeat(lists)) { lists.remove(0); i++; } j++; max = Math.max(max, lists.size()); } return max; } public static boolean checkIsRepeat(List<Character> lists) { HashSet<Character> hashSet = new HashSet<>(lists); return hashSet.size() != lists.size(); } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算