leetcode算法每天一题003:无重复字符的最长子串(max函数,滑动窗口+set)

基础知识(比较大小函数)

  • #incloud< algroithm >;c = max(a,b);

  • java : Math.max

题目描述

  • 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3

暴力解法

C++

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int len = s.length(); if(len<2)return len;
        int m=1,ch=s[0],p=0;
        for(int i=1;i<len;i++){
            for(int j=p;j<i;j++){
            if( s[j]==s[i]){
                m=max(m,i-p);
                p=j+1;
            }
            }
        }
        m=max(m,len-p);
        return m;
    }
};
  • 滑动窗口
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int l=0,r=0,res =0;
        set<char> ms;
        
        while(r<s.size()){ // for(int i=0;i<s.size();i++){ r无法遍历
            char x = s[r];
            if(ms.count(x)==0){//没有重复值
                r++;
                ms.insert(x);
                res = max(res,r-l); 
            }else{
                ms.erase(s[l]);
                l++;//我们发现有重复的值在窗口中了,就不断地减少窗口,即令i++
            }
            
        }
        return res;
    }
};

java

Java String 类和支持的方法描述c++ string和数组区别
在这里插入图片描述

python

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        lens = len(s)
        if(lens<2):
            return lens
        m=1
        ch=s[0]
        p=0
        for i in range(1,lens,1):
            for j in range(p,i,1):
                if( s[j]==s[i]):
                    m=max(m,i-p)
                    p=j+1

        m = max(m,lens-p);
        return m; 

  • python中len是关键字

其它

C语言中 char s[] 和 char* s 的区别

class Solution {
public:


    int lengthOfLongestSubstring(string s) {
        

 int len=sizeof(s)/sizeof(char);//strlen(*s); !!!!!!!!???????
    if(len<2)return len;
    int m=1,ch=s[0],p=0;
    for(int i=1;i<len;i++){
        for(int j=p;j<i;j++){
          if( s[j]==s[i]){
              
            m=max(m,i-p);
               p=j+1;
          }
         }
    }
    m=max(m,len-p);
    return m;
}

};

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值