题目
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.
Subscribe to see which companies asked this question
思路
0.可以使用动态规划求解,但是个人感觉就是直接查询一次最简单。
1.首先判断字符串是否为空,为空,直接返回0
2.不为空,就从字符串的第0个字符开始查找,依次检查,设当前查找的字符串的起始位置为start, 其结束位置肯定为当前正在遍历的字符串索引序号,如果当前的字符还没有在当前子串中出现(它的位置记录为-1或者小于start),那么直接加入到当前子串;如果已经在当前子串中出现,那么此时不重复的子串就被打断,应该更新子串,将当前的子串的开始start更改为当前字符出现位置的下一个,然后可以将当前字符包入已更新的子串。每次加入新字符的时候要判断是否更新已经找到的最大值。
class Solution {
public:
int pos[1000];
int start{0},len{0}; //当前正在找的
int max_s{0},max_e{0},max_l{0}; //已经找到的最短的
int lengthOfLongestSubstring(string s) {
if(s.size()==0) return 0;
memset(pos,-1,1000);
for(int index=0; index<s.size();++index){
if(pos[s[index]]>=start){ //已经出现在当前的子串中
start = pos[s[index]]+1;
}
len=index-start+1;
if(len>max_l){
max_l=len;
max_s=start;
max_e=index;
}
pos[s[index]]=index;
}
return max_l;
}
};