数据结构与算法[LeetCode]—Longest Substring Without Repeating Characters,leetcoderepeating
分享于 点击 29149 次 点评:187
数据结构与算法[LeetCode]—Longest Substring Without Repeating Characters,leetcoderepeating
Longest Substring Without Repeating Characters
题目分析:
贪心法。找出每次子串的最大区间,两两比较找出最大的即可。
用一个数组last[128]记录每个字符最后出现的位置。
用start 记录当前子串区间的开始位置。
判断当前字符本子串出现重复(出现:last[s[i]-0]>=start)记录该子串长度(i-start
),开始下一个子串区间计算。 复杂度:O(n) 注意:1、在LeetCode 测试数据中出现了所有128个ASCLL范围内字符,并非题目暗示的26个字母。 2、最后遍历完整个字符串s[i]='\0'。记得这也是一个子串区间,还需要比较一次,容易漏掉。class Solution{
public:
int lengthOfLongestSubstring(string s){
const int ASCLL_MAX=128;
int last[ASCLL_MAX]; //存放字符最后出现的位置
for(int i=0;i<ASCLL_MAX;i++)last[i]=-1;
int start=0,duration=0;
int i=0;
while(s[i]!='\0')
{
if(last[s[i]-0]>=start){ //说明字符s[i]出现了重复,s[i]-'a'为字符编号
duration=max(duration,i-start);
start=last[s[i]-0]+1;
}
last[s[i]-0]=i;
i++;
}
//最后循环结束还有一个字符串需要比较一次
duration=max(duration,i-start);
return duration;
}
};
相关文章
- 暂无相关文章
用户点评