给定一个字符串,找到最长子串的长度,而不重复字符。
2018-12-18 09:54
267 查看
思路:就是用set存数据,之后两个指针i,j。其中i不断向后遍历,set中不断添加i++的元素,当set遇到重复元素,则j向后移动一位,同时删除j所在位置的的元素,并且比较此时长度
class Solution { public int lengthOfLongestSubstring(String s) { if(s==null || s.length()== 0) return 0; HashSet set=new HashSet(); int ret=0; for(int i=0,j=0;i<s.length();i++){ if(!set.contains(s.charAt(i))){ set.add(s.charAt(i)); ret=Math.max(ret,set.size()); }else{ set.remove(s.charAt(j++)); } } return ret; } }
之后发现报错,aab这个输出为1,因为j后移会删除j++的值,那么a则不会存入进去,之后就开始看官方答案
class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); Set<Character> set = new HashSet<>(); int ans = 0, i = 0, j = 0; while (i < n && j < n) { // try to extend the range [i, j] if (!set.contains(s.charAt(j))){ set.add(s.charAt(i++)); ans = Math.max(ans, set.size()); } else { set.remove(s.charAt(j++)); } } return ans; } }
相关文章推荐
- 给定一个字符串,找到最长的子串的长度没有重复字符
- 给定一个字符串,返回字符串中没有重复字符的最长子串的长度
- 求给定的某一个字符串中的最长的没有重复字符的子串的长度
- 给定一个字符串,求出其最长的重复子串的长度
- 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
- 02_对N个长度最长可达到1000的数进行排序、对给定的一个字符串,找出有重复的字符,并给出其位置、输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序
- (字符串哈希表)找到字符串中不重复出现字符的最长子串长度
- 求字符串的不重复字符的最长子串长度的问题
- 找到字符串的最长无重复字符子串
- 给定一个字符串,输出最长的重复子串
- c语言实现 在一个字符串中找到由同一个字符组成的最长子串
- 求字符串的不重复字符的最长子串长度的问题
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- 找到字符串的最长无重复字符子串
- 一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。 小王对既是素数又是回文的
- [leetcode]获取字符串中字符不重复的最长子串的长度
- 每日算法题三道之给定一个字符串求k个不同字符的最长子串
- 给定一个字符串,找到包含该字符串所有字符的最短子串
- 给定一个字符串,求出其最长的重复子串
- 【每日面试题】给定一个字符串,求出其最长的重复子串