LeetCode Longest Substring Without Repeating Characters
2017-02-03 18:24
561 查看
Problem
My Answer in C++
A.O(n^2) => TLEclass Solution { public: int lengthOfLongestSubstring(string s) }; int hashmap[505]; bool hashmapjudge(string s, int l, int r) { // using hashmap judge whether the string has repeat character or not bool ans = true; memset(hashmap, 0, sizeof(hashmap)); for (int i = l; i <= r; i++) { int index = int(s[i]); if (hashmap[index] == 1) { ans = false; break; } else hashmap[index] = 1; } return ans; } int Solution::lengthOfLongestSubstring(string s) { int ans = 0; if (s.length() == 1) return 1; for (int i = 0; i < s.length(); i++) { for (int j = 0; j < s.length(); j++) { if (hashmapjudge(s, i, j)) { if (j-i+1 > ans) ans = j-i+1; } } } return ans; }
B.O(n) => Accept
class Solution { public: int lengthOfLongestSubstring(string s) }; int hashmap[505]; // using hashmap record the character's pla int Solution::lengthOfLongestSubstring(string s) { int ans = 0, start = 0; memset(hashmap, -1, sizeof(hashmap)); if (s.length() == 0) return 0; if (s.length() == 1) return 1; for (int i = 0; i < s.length(); i++) { int index = int(s[i]); // refresh start if (hashmap[index] != -1 && hashmap[index]+1 > start) start = hashmap[index]+1; if (i-start > ans) ans = i-start; // refresh character's pla in hashmap(using ASCII index) hashmap[index] = i; } return ans+1; }
Details
Better Solutions
Feelings and Review
总的来说,本题难度一般(废话)。1.首先要做的是理解题意,题目求所有满足要求的特殊字符串中最长字符串的长度,这个字符串里面的字符都是不重复的。
2.本题实现起来较为容易,但是需要冷静,暴力解决不了问题,O(n^2)的算法(即上文中的A解法)不能过最后一个样例(非常长),因此需要考虑算法的优化。
3.我所考虑的一种算法是,遍历一遍字符串,一个是根据由散列(index是字符的ASCII码)将字符串中的每一个字符出现的位置记录下来并不断更新;另一个是维护特殊字符串的首指针(start):当出现重复的字符时,将首指针移动到这个重复字符上一次出现位置的下一位(比如重复字符'a'上一次出现的位置是3,start就移动到4),但是前提是首指针不能倒退!(考虑样例:abssba)。
最后,在这个遍历的过程中,不断判断和更新answer即可。时间复杂度O(n)。
2017/2/3
相关文章推荐
- [LeetCode] Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters(LeetCode)
- 2015-07-13 leetcode:Longest Substring Without Repeating Characters
- [Leetcode]解题文档-Longest Substring Without Repeating Characters
- LeetCode第三关:Longest Substring Without Repeating Characters --> Difficulty: Medium
- 【LeetCode】Longest Substring Without Repeating Characters && 【九度】题目1530:最长不重复子串
- leetcode_Longest Substring Without Repeating Characters
- leetcode---longest-substring-without-repeating-characters---字符串
- 【一天一道LeetCode】 #3 Longest Substring Without Repeating Characters
- leetcode_3 - Longest Substring Without Repeating Characters
- [leetcode] Longest Substring Without Repeating Characters
- 【leetcode】Longest Substring Without Repeating Characters
- leetcode-Longest Substring Without Repeating Characters
- [LeetCode 003] Longest Substring Without Repeating Characters
- [leetcode]Longest Substring Without Repeating Characters
- leetcode: Longest Substring Without Repeating Characters
- leetcode 3 : Longest Substring Without Repeating Characters 最长无重复子串 (C# 语言版)
- leetcode 3 Longest Substring Without Repeating Characters
- LeetCode – Refresh – Longest Substring Without Repeating Characters
- LeetCode3-Longest Substring Without Repeating Characters