C++版- Leetcode 3. Longest Substring Without Repeating Characters解题报告

Leetcode 3. Longest Substring Without Repeating Characters

 

提交网址: https://leetcode.com/problems/longest-substring-without-repeating-characters/

Total Accepted: 149135 Total Submissions: 674678 Difficulty: Medium

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.


分析:

使用哈希表,保存每个字符上一次出现的位置,时间复杂度为O(n).



AC代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int loc[256];     // 哈希表保存字符上一次出现的位置,ASCII码是8位,一般用前7位,是128(2^7)个可用字符。IBM机器的扩展使用了最高位,故用2^8个(256)
        memset(loc, -1, sizeof(loc));
        
        int curStartIdx = -1, max_len = 0;  //curStartIdx为当前子串的开始位置,初始化为-1
        for(int i = 0; i < s.size(); i++)
        {
            if(loc[s[i]] > curStartIdx)  //如果当前字符出现过,那么当前子串的起始位置为这个字符上一次出现的位置+1
            {
                curStartIdx = loc[s[i]];
            }
            if(i - curStartIdx > max_len)  // 使用贪心算法进行子串延伸,关键!!!
            {
                max_len = i - curStartIdx;
            }
            loc[s[i]] = i;  //如果当前字符没出现过,将其位置记录在loc数组中 
        }
        return max_len;
    }
};


You are here! 
Your runtime beats 61.72% of cppsubmissions.



全部评论

相关推荐

06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务