首页 > 其他 > 详细

[6]力扣每日一题

时间:2020-05-02 23:32:56      阅读:67      评论:0      收藏:0      [点我收藏+]

题目呈现如下:

技术分享图片

思路介绍:

采用滑动窗口算法,有点类似于低配版的KMP,比较容易,具体实现见AC代码注释.有些细节还是比较值得注意的.

下附AC代码:

class Solution {
public:
    static int lengthOfLongestSubstring(string s) {
        int isSeen[128]; // 由于题目中出现的是ASCII码,所以用数组是绰绰有余了,不必用到哈希
        memset(isSeen, 0, sizeof(isSeen));
        int le = 0, ri = -1, ans = 0; // 最需要注意的是右侧指针ri的初始值,因为子串s[0]~s[0]也是必须要判断滴~
        int len = s.length(); // 这个需要注意一下,每次求s.length(),时间复杂度为O(n)的..
        for (; le < len; ++le) { 
            if (le > 0) isSeen[s[le - 1]] = 0;
            while (isSeen[s[ri + 1]] == 0 && ri < len - 1) isSeen[s[++ri]] = 1; // 注意,是往ri右侧一个字符眺望的
            ans = max(ans, ri-le+1);
        }
        return ans;
    }
};

[6]力扣每日一题

原文:https://www.cnblogs.com/tsuipo/p/12819817.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!