您的位置:首页 > 编程语言 > Java开发

LeetCode 3: Longest Substring Without Repea (JAVA)

2015-04-06 00:00 211 查看
摘要: 因为map放入相同的key,只是跟新value,所以当前map中的位置都是最新的.如果在头的前面就说明都没出现过,后面就表示出现了,这时候移动头指针就行.map表不会很大,只是要频繁的更新

Longest Substring Without Repeating Characters

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.



public class Solution {
public int lengthOfLongestSubstring(String s) {
int max = 1, tempmax = 1, head = 0;
char[] ss =  s.toCharArray();
if(ss.length == 0) return 0;
else if(ss.length == 1) return 1;
else if(ss.length == 2){
if(ss[0] == ss[1]) return 1;
else return 2;
}
char shead = ss[head];
Map<String,Integer> map = new HashMap<String,Integer>();

new String();
String add = String.valueOf(shead);
map.put(add,head);

for(int i = 1; i < ss.length; i++){

tempmax = i-head+1;
char stail = ss[i];
new String();
String now = String.valueOf(stail);

if(map.containsKey(now)){
int pointer = map.get(now);
if(pointer >= head) {

//因为map放入相同的key,只是跟新value,所以当前map中的位置都是最新的
//如果在头的前面就说明都没出现过,后面就表示出现了,这时候移动头指针就行
//map表不会很大,只是要频繁的更新

tempmax = i-pointer;
head = pointer+1;
}else{
if(max < tempmax) max = tempmax;
}
map.put(now,i);
}else {
if(max < tempmax) max = tempmax;
map.put(now,i);
}
}
return max;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息