首页 > 代码库 > LeetCode-003 Longest Substring Without Repeating Characters
LeetCode-003 Longest Substring Without Repeating Characters
【题目】
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.
【题意】
题意是找出最长不包含重复字符的子串,然后返回该子串的长度
【思路】
建一个哈希表用来标记字符是否出现过,由于所有字符都对应于1个ASCII码,所以建一个256长度的布尔数组isExisted[256]即可方法:
1. 使用两个指针p1, p2, 初始时都指向字符串头
2. p2指针不断向后扫描,没有出现过的字符都要在isExisted[256]标记,直到遇到已经出现过的字符停止,比如我们用X表示
3. 计算此时子串长度p2-p1;
4. p1向后扫描,直到指向X为止,扫描过程中,将所有字符都标记为false,即还没出现过。
5. p1指向X的后一个字符
6. 重复2,3,4,5直到p2扫完字符串
【代码】
class Solution { public: int lengthOfLongestSubstring(string s) { if(s.length()==0)return 0; int p1=0, p2=0; int maxlen=0; bool isExisted[256]; memset(isExisted, false, 256); while(p2<s.length()){ if(isExisted[s[p2]]){ maxlen=max(p2-p1, maxlen); while(p1<p2&&s[p1]!=s[p2]){ isExisted[s[p1]]=false; p1++; } isExisted[s[p1]]=false; p1++; } else{ isExisted[s[p2]]=true; p2++; } } maxlen=max(p2-p1, maxlen); //别漏了最后一个子串 return maxlen; } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。