leetcode_3Longest Substring Without Repeating Characters

题目:

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.

Subscribe to see which companies asked this question.


——————————————————————————————————————————————————————————————————————————


没有什么要求,那就用最简单的for循环吧~

代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
       vector<char> st;
       if(s.size()==1){
           return 1;
       }
       for(int i = 0; i < s.size(); i++){
        vector<char> inst;
        inst.push_back(s[i]);
           for(int j = i+1; j < s.size();j++){
               int flag = 0;
               for(int k = 0; k < inst.size(); k++){
                   if(inst[k] == s[j]){
                       flag = 1;
                       break;
                   }
               }
               if(flag == 0){
                   inst.push_back(s[j]);
                   if(inst.size() > st.size()){
                       st = inst;
                   }
               }
               else{
                   if(inst.size() > st.size()){
                       st = inst;
                   }
                   break;
               }
           }
       }
       return st.size();
    }
};

for里套for。但是这样写中间的某些细节也容易搞错。哎。

上传后一看速度排名只战胜了百分之七点几。。。

额。


意识到这样做是不够的。想其他方法也想不出来,就参考一下吧。

别人的思路:用map存每个数字对应的下标。长度就是两个数下标之差+1,也就是这个数与前一个数的前一位的(start)下标之差。

每次找到重复的之后,start变为这个重复的以前的数字。

厉害了

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        
        map<char, int> charMap;
        int start = -1;
        int maxLen = 0;
        
        for (int i = 0; i < s.size(); i++) {
            if (charMap.count(s[i]) != 0) {
                start = max(start, charMap[s[i]]);
            }
            charMap[s[i]] = i;
            maxLen = max(maxLen, i-start);
        }
        
        return maxLen;
    }
};
得自习想想这个代码的思想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值