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

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

  • #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
            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和数组区别
leetcode算法每天一题003:无重复字符的最长子串(max函数,滑动窗口)_第1张图片

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;
}

};

leetcode算法每天一题003:无重复字符的最长子串(max函数,滑动窗口)_第2张图片
leetcode算法每天一题003:无重复字符的最长子串(max函数,滑动窗口)_第3张图片

你可能感兴趣的:(笔记,算法,leetcode,c++)