- 题目:给定一字符串,求其无重复字符的最长子串长度。
- 思路:for循环一次,时间复杂度为O(N)。字符的ascii值为32~126。start表示当前无重复字符子串的初始位置,初始值为0;可定义一个位置数组pos[128]表示for循环索引到当前位置时相应的字符对应的位置。若当前字符s[i](其ascii值为cur_pos),若pos[cur_pos]>=start,说明在start之后已有该字符s[i],则以start开始的子串第一次遇到重复字符,打住。判断当前长度是否大于max_len,若大于则更新max_len。然后更新start,以及pos[cur_pos]...。注意最后一个字符的处理。
- 代码:
class Solution { public: int lengthOfLongestSubstring(string s) { int len_s=s.size(); const int M=128; int pos[M]; for(int i=0;i<M;i++) pos[i]=-1; int start=0; int max_len=0; for(int i=0;i<len_s;i++) { int cur_pos=s[i]; if(pos[cur_pos]>=start) { if(max_len<(i-start)) { max_len=i-start; } start=pos[cur_pos]+1; } pos[cur_pos]=i; } if((len_s-start)>max_len) max_len=len_s-start; return max_len; } };
原文地址:https://www.cnblogs.com/dreamer123/p/9157761.html
时间: 2024-10-20 16:08:14