[Leetcode]_3 Longest Substring Without Repeating Characters

/**
 *  Index: 3
 *  Title: Longest Substring Without Repeating Characters
 *  Author: ltree98
 **/

一个checkMap来存储某字符是否出现过
时间复杂度O(n^2), 空间复杂度O(n)

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.length() < 2)
            return s.length();

        int maxLen = 1;
        for(int i = 0; i < s.length(); i++) {
            int checkMap[300] = {0};
            checkMap[s[i] - ' '] = 1;
            for(int j = i + 1; j < s.length(); j++) {
                if(checkMap[s[j] - ' '] != 0)    {
                    maxLen = max(maxLen, j - i);
                    break;
                }
                else if( j == s.length() - 1)
                    maxLen = max(maxLen, j - i + 1);
                checkMap[s[j] - ' '] = 1;
            }
        }
        return maxLen;
    }
};

当然,还是要看一下大神们的解法。
时间复杂度O(n), 空间复杂度O(1)

设置一个checkMap 来存储,每个字符出现的位置。
如果出现同一个字符,就重置子串启始位置。
不忍看自己的代码了….

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        std::vector<int> checkMap(256, -1);
        int maxLen = 0, start = -1;
        for(int i = 0; i < s.length(); i++)    {
            if(checkMap[s[i]] > start)
                start = checkMap[s[i]];
            checkMap[s[i]] = i;
            maxLen = max(maxLen, i - start);
        }
        return maxLen;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值