您的位置:首页 > 其它

【LeetCode】003 Longest Substring Without Repeating Characters 最长的没有重复的子字符串

2017-08-23 19:13 393 查看

【LeetCode】003 Longest Substring Without Repeating Characters

题目

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.

思路

AC

import java.util.*;
public class Solution {
// 超时,不通过
public int lengthOfLongestSubstring0(String s) {
int maxLen = 0;
List<Character> subList = new ArrayList<>();
for (int i = 0; i < s.length(); i ++){
char ch = s.charAt(i);
int index = subList.indexOf(ch);
if (index != -1){
if (maxLen < subList.size()) maxLen = subList.size();
if (index == subList.size()-1) subList.clear();
else                           subList = subList.subList(index+1, subList.size());
}

subList.add(ch);
}
if (maxLen < subList.size()) maxLen = subList.size();
return maxLen;
}

public int lengthOfLongestSubstring(String s) {
int maxLen = 0;
StringBuilder sub = new StringBuilder(s.length());
int fromIndex = 0;

for (int i = 0; i < s.length(); i ++){
char ch = s.charAt(i);

int index = sub.indexOf(ch+"", fromIndex);  // 重复“字符”(字符串)的位置

if (index != -1) fromIndex = index+1;  // 不断调整起始下标

sub.append(ch);

int len = sub.length() - fromIndex;  // 总长度 - 起始下标 = 当前子字符串的长度

if (maxLen < len) maxLen = len;
}

return maxLen;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐