[LeetCode]Longest Substring Without Repeating Characters
2014-07-18 15:19
477 查看
题目描述
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring withoutrepeating letters for "abcabcbb" is "abc", whichthe
length is 3. For "bbbbb" the longest substring is "b", with the length of 1.
给出字符串中最长无重复字符的子串的长度。
解题思路
为了求得最长无重复字符的子串的长度,我们可以用一个int型数组来存放字符出现的位置,如果值为-1,说明字符还未出现过;用start 来记录最长无重复子串起始位置
用maxLen 来记录最长无重复子串最大长度;用变量i来遍历字符串;在一次循环中实现如下功能:
如果当前字符未出现,则数组中记录当前字符出现的位置,i++;
如果当前字符已出现,比较i - start和maxLen,如果大于则更新maxLen,同时将start和i更新到当前字符上一次出现的位置的后一位,位置数组归零;
需要注意的是按上述方法可能会忽略最后一个无重复子串(字符串尾部),所以需在循环结束后判断一下;
代码
/** * 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", * whichthe length is 3. For "bbbbb" the longest substring is "b", with the length of 1. * @param s * @return */ public static int lengthOfLongestSubstring(String s) { if (s == null || s.length() == 0) return 0; if (s.length() == 1) return 1; int n = s.length();//数组长度 int[] charPos = new int[128];//记录ASCII码出现的位置 int start = 0;//最长无重复子串起始位置 int maxLen = 0;//最长无重复子串最大长度 int i = 0; Arrays.fill(charPos, -1);//初始值置为-1 while(i < n){ int ch = s.charAt(i) - 0; if(charPos[ch]!=-1){ //如果[start,i)的子串长度大于maxLen,则更新maxLen if(i - start > maxLen) maxLen = i - start; //start更新为重复字符的后一个位置 start = charPos[ch] + 1; //i更新为重复字符的后一个位置,以便能够重新更新charPos i = charPos[ch] + 1; //置为初始值 Arrays.fill(charPos, -1); } else { //记录出现字符的位置 charPos[ch] = i; i++; } } //判断以字符串末尾结尾的无重复字符子串的长度是否大于maxLen if(i - start > maxLen) maxLen = i - start; return maxLen; }
相关文章推荐
- Leetcode || Longest Substring Without Repeating Characters
- 【LeetCode】(3)Longest Substring Without Repeating Characters(Medium)
- [leetcode] Longest Substring Without Repeating Characters
- Leetcode - Longest Substring Without Repeating Characters
- leetcode Longest Substring Without Repeating Characters
- leetcode_c++:哈希:Longest Substring Without Repeating Characters(003)
- LeetCode 3 Longest Substring Without Repeating Characters
- LeetCode | 3)Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters —leetcode第三题
- leetcode----Longest Substring Without Repeating Characters
- Leetcode问题解答:3. Longest Substring Without Repeating Characters
- Java [leetcode 3] Longest Substring Without Repeating Characters
- LeetCode 3 Longest Substring Without Repeating Characters
- leetcode第3题——**Longest Substring Without Repeating Characters
- [LeetCode]-003-Longest Substring Without Repeating Characters
- [LeetCode] Longest Substring Without Repeating Characters最长无重复子串
- 算法分析与设计——LeetCode:3. Longest Substring Without Repeating Characters
- leetcode--136--Longest Substring Without Repeating Characters
- leetcode-Longest Substring Without Repeating Characters
- leetcode--Longest Substring Without Repeating Characters