Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb", the answer is "abc", which the length is 3.
Given "bbbbb", the answer is "b", with the length of 1.
Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be asubstring,
"pwke" is a subsequence and not a substring.
我的思路:
每次用两个端点确定一个子字符串,其中左端点固定,右端点一支向右走,当遇到右端点指向的字符在该字符串中出现第二次时,说明去掉这个字符就是该子字符串的长度,和以前的最大长度比较。需要注意不要out of index. 从i到I+j长度为J+1
STRING的方法:
substring,indexOf,cahrAt
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s.equals(""))
return 0;
else{
int len = s.length();
int max = 1;
for(int i = 0;i<len;i++){
for(int j=1;j<len-i;j++){
String sub = s.substring(i,i+j);
if((sub.indexOf(s.charAt(i+j)))!=-1)
break;
max = ((j+1)>max)?(j+1):max;
}
}
return max;
}
}
}
public int lengthOfLongestSubstring(String s) {
if (s.length()==0) return 0;
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
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;
}
public int lengthOfLongestSubstring(String s) {
int i = 0, j = 0, max = 0;
Set<Character> set = new HashSet<>();
while (j < s.length()) {
if (!set.contains(s.charAt(j))) {
set.add(s.charAt(j++));
max = Math.max(max, set.size());
} else {
set.remove(s.charAt(i++));
}
}
return max;
}
hashset:http://blog.youkuaiyun.com/chenssy/article/details/21988605
HashSet继承AbstractSet类,实现Set、Cloneable、Serializable接口。其中AbstractSet提供 Set 接口的骨干实现,从而最大限度地减少了实现此接口所需的工作。Set接口是一种不包括重复元素的Collection,它维持它自己的内部排序,所以随机访问没有任何意义.
方法:
iterator()方法返回对此 set 中元素进行迭代的迭代器。返回元素的顺序并不是特定的。
size()返回此 set 中的元素的数量(set 的容量)。底层调用HashMap的size方法,返回HashMap容器的大小。
isEmpty(),判断HashSet()集合是否为空,为空返回 true,否则返回false。
、contains(),判断某个元素是否存在于HashSet()中,存在返回true,否则返回false。
add()如果此 set 中尚未包含指定元素,则添加指定元素。如果此Set没有包含满足(e==null ? e2==null : e.equals(e2)) 的e2时,则将e2添加到Set中,否则不添加且返回false。由于底层使用HashMap的put方法将key = e,value=PRESENT构建成key-value键值对,当此e存在于HashMap的key中,则value将会覆盖原有value,但是key保持不变,所以如果将一个已经存在的e元素添加中HashSet中,新添加的元素是不会保存到HashMap中,所以这就满足了HashSet中元素不会重复的特性。
remove如果指定元素存在于此 set 中,则将其移除。
clear从此 set 中移除所有元素。
hashtable: http://blog.youkuaiyun.com/chenssy/article/details/22896871
本文探讨了如何寻找字符串中最长的无重复字符子串,并提供了三种不同的解决方案:使用String方法、利用HashMap以及采用HashSet来实现。同时介绍了HashMap、HashSet等数据结构的基本原理及其在解决此类问题中的应用。
687

被折叠的 条评论
为什么被折叠?



