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

leetcode-3. Longest Substring Without Repeating Characters

2016-09-13 15:06 681 查看
前言:最近开学事情特别多,隔了一个月没刷题,真是蛋疼。

----------------------

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 a substring,
"pwke"
is
a subsequence and not a substring.

首先想到的最简单的O(n^2)的时间效率代码,提交之后果然超时。

public class Solution {
public int lengthOfLongestSubstring(String s) {
int maxLength = 0;
for(int i = 0 ; i < s.length() - maxLength; i ++){

HashMap<Character,Integer> s_map = new HashMap<Character,Integer>();
for(int j = i; j < s.length(); j ++){
if(s_map.containsKey(s.charAt(j))) break;
else s_map.put(s.charAt(j),j);
}

if(s_map.size() > maxLength) maxLength = s_map.size();
}
return maxLength;
}
}


稍微进行了改动,当碰到第一个重复的字符串的时候,将i的值扩大。但是效率还是比较低,You are here!

Your runtime beats 3.07% of java submissions.。效果有点差,后续再看怎么改进

public class Solution {
public int lengthOfLongestSubstring(String s) {
int maxLength = 0;
for(int i = 0 ; i < s.length() - maxLength; i ++){

HashMap<Character,Integer> s_map = new HashMap<Character,Integer>();
for(int j = i; j < s.length(); j ++){
if(s_map.containsKey(s.charAt(j))) {i = s_map.get(s.charAt(j));break;}
else s_map.put(s.charAt(j),j);
}

if(s_map.size() > maxLength) maxLength = s_map.size();
}
return maxLength;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 算法