• Leetcode 3


    O(N^3)的复杂度竟然过了(╯‵□′)╯︵┻━┻

    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            
            if(s == "")
                return 0;
            int res = 1;
            
            for(int i=0;i < s.length();i++){
                int count = 1;
                for(int j=i+1;j < s.length();j++){
                    int flag = 0;
                    for(int k=i;k < j;k++){
                        if(s[k] == s[j]){flag = 1;break;}
                    }
                    if(flag == 0) count++;
                    else break;
                }
                if(count > res) res = count;
            }
            return res;
        }
    };

    _

    复杂度O(N)解法

    这里我们可以建立一个256位大小的整型数组来代替HashMap,这样做的原因是ASCII表共能表示256个字符,所以可以记录所有字符,然后我们需要定义两个变量res和left,其中res用来记录最长无重复子串的长度,left指向该无重复子串左边的起始位置,然后我们遍历整个字符串,对于每一个遍历到的字符,如果哈希表中该字符串对应的值为0,说明没有遇到过该字符,则此时计算最长无重复子串,i - left +1,其中i是最长无重复子串最右边的位置,left是最左边的位置,还有一种情况也需要计算最长无重复子串,就是当哈希表中的值小于left,这是由于此时出现过重复的字符,left的位置更新了,如果又遇到了新的字符,就要重新计算最长无重复子串。最后每次都要在哈希表中将当前字符对应的值赋值为i+1。代码如下:

    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            int Map[256] = {0};
            int left = 0;
            int res = 0;
            for(int i=0;i < s.length();i++){
                if(Map[s[i]] == 0 || Map[s[i]] < left){
                    res = max(res,i-left+1);
                }
                else{
                    left = Map[s[i]];
                }
                Map[s[i]] = i+1;
            }
            return res;
        }
    };

    _

  • 相关阅读:
    CentOS 出错处理
    g13 root
    修复误删系统文件
    c++ list sort方法
    批量修改outlook联系人头像,并同步手机
    IT大牛们 学术搜索
    oracle 表空间操作
    CentOS 5.5 安装MPICH2\MRNet\Launchmon时遇到的问题
    自我反省
    积累航程
  • 原文地址:https://www.cnblogs.com/cunyusup/p/9603411.html
Copyright © 2020-2023  润新知