给定一个字符串,找到最长的子串的长度没有重复字符
2018-01-23 22:14
901 查看
题目来自leetcode
思路:基本的想法是,让一个HashMap存储字符的字符串作为键及其位置的值,并保持两个指针定义的最大子串。移动右边的指针扫描字符串,同时更新HashMap。如果角色已经在HashMap,然后将左手指向右上发现相同的字符。注意,这两个指针只能向前移动。
这个题目最合适的方法是KMP算法,但是我没实现了。
代码如下:
public static int lengthOfLongestSubstring(String s) {
if(s.length()==0)
return 0;
HashMap<Character, Integer> map = new HashMap<>();
int max = 0;
for(int i=0,j=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){
j = Math.max(j,map.get(s.charAt(i))+1);
}
map.put(s.charAt(i),i);
max = Math.max(max,i-j+1);
}
return max;
}
思路:基本的想法是,让一个HashMap存储字符的字符串作为键及其位置的值,并保持两个指针定义的最大子串。移动右边的指针扫描字符串,同时更新HashMap。如果角色已经在HashMap,然后将左手指向右上发现相同的字符。注意,这两个指针只能向前移动。
这个题目最合适的方法是KMP算法,但是我没实现了。
代码如下:
public static int lengthOfLongestSubstring(String s) {
if(s.length()==0)
return 0;
HashMap<Character, Integer> map = new HashMap<>();
int max = 0;
for(int i=0,j=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){
j = Math.max(j,map.get(s.charAt(i))+1);
}
map.put(s.charAt(i),i);
max = Math.max(max,i-j+1);
}
return max;
}
相关文章推荐
- 给定一个字符串,返回字符串中没有重复字符的最长子串的长度
- 求给定的某一个字符串中的最长的没有重复字符的子串的长度
- (字符串哈希表)找到字符串中不重复出现字符的最长子串长度
- 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
- 给定一个字符串,求出其最长的重复子串的长度
- 02_对N个长度最长可达到1000的数进行排序、对给定的一个字符串,找出有重复的字符,并给出其位置、输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序
- 求字符串的不重复字符的最长子串长度的问题
- 返回一个字符串中重复出现的最长字串的长度及其开始字符
- 给定一个字符串,找到包含该字符串所有字符的最短子串
- [leetcode]获取字符串中字符不重复的最长子串的长度
- 回文串是指这个字符串无论从左读还是从右读,所读的顺序是一样的;简而言之,回文串是左右对称的。现在,对于一个给定的母串 abcdedcb求最长回文子串的长度
- 求字符串中不含重复字符的最长子串的长度
- leetcode-java.T003_LongestSubstringWithoutRepeatingCharacters 给定一个字符串,找字符中的最大非重复子串
- 求字符串的不重复字符的最长子串长度的问题
- 给定一个字符串,求出最长的连续配对括号子串的长度
- 找到字符串的最长无重复字符子串
- 求一个字符串的最长不重复子串的最大长度
- 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。若压缩后的字符串没有变短,则返回原先的字符串。 给定一个stri
- 求字符串中不含重复字符的最长子串的长度
- 百度面试题 求字符串中不含重复字符的最长子串长度