Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: “abcabcbb”
Output: 3
Explanation: The answer is “abc”, with the length of 3.
Example 2:
Input: “bbbbb”
Output: 1
Explanation: The answer is “b”, with the length of 1.
Example 3:
Input: “pwwkew”
Output: 3
Explanation: 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.
/*
Longest Substring Without Repeating Characters.
Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew"
Output: 3
Explanation: 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.
*/
#include<iostream>
using namespace std;
#include<vector>;
class Solution {
public:
int lengthOfLongestSubstring(string s) {
vector<int> dict(256, -1); //建立一个256位的整型数组来代替哈希表,ASCII表共能表示256个字符,记录字符位置,256个位置每个位置的值都是-1
int maxLen = 0, start = -1;
for (int i = 0; i != s.length(); i++) {
if (dict[s[i]] > start)
start = dict[s[i]]; //这里很妙!!!以abcbef为例,当遍历到第二个'b'重复时,start=第一个'b'位置相当于删除'ab'以c为start开始统计,以前一个重复字符的开始重新统计
dict[s[i]] = i;
maxLen = max(maxLen, i - start); //新开始的子字符串长度和之前的子字符串长度相比较,取长度较长的子字符串
}
return maxLen;
}
};
int main(){
string s = "pwwkew";
Solution S;
cout << S.lengthOfLongestSubstring(s);
return 0;
}
相关网址:https://leetcode.com/problems/longest-substring-without-repeating-characters/
https://www.cnblogs.com/inception6-lxc/p/9206259.html