1/ 开辟一个空间为256的int型数组dict[],初始值全为-1
2/ 设置一个flag变量,记录字符上一次出现的位置,初始值为-1
3/ 将字符串S[]中的字符和其下标,与新开辟的数组下标和值一一对应。
例如 字符串 s[]="ABCDGAB“
dict[字符]=对应的下标志;
即,
dict[A]=0;
dict[B]=1;
……
dict[s[i]]=i;
4/ 每次建立关系前,先判断该字符是否出现过,用dict[s[i]]>flag=-1判断。
若出现过,用此时的i减去上次的下标值。
以字符A为例,
dict[A]=0; //A第一次出现
dict[A]=5; //A第二次出现
当运行到A第二次出现的位置时,不执行dict[s[i]]=i;
而是将上一次的i取出来,赋值给flag;
i-flag即为无重复子串的长度。
5/ 选出最大的一组长度返回
max(maxLen, i-flag);
当A再次出现,dict[A]=0>flag=-1,start=dict[s[i]];通过i-flag就可得无重复子串长度
// 完整代码如下 int LongestSubstringWithoutDuplication(String s){ vector<int>dict(256,-1); int flag=-1; for(int i=0;i<s.length();i++){ if(dict[s[i]]>start) { start=dict[s[i]]; } dict[s[i]]=i; int maxLen=max(maxLen, i-flag); } return maxLen;