用 PHP和Golang 来刷leetCode 之 无重复字符 最长子串

用 PHP和Golang 来刷leetCode 之 无重复字符 最长子串

大家好,又见面了,我是全栈君。

精选文章

免费获取Git GO Java视频教程
Go语言生成二维码是如此简单

涨见识| 字节PHP/Golang社招面经

一文让你知道为什么学了PHP的都要转学Go语言

用 PHP和Golang 来刷leetCode 之 无重复字符 最长子串

方法一

class Solution {
    /**
     * @param String $s
     * @return Integer
     */
    function lengthOfLongestSubstring($s) {
        if (strlen($s)==0) return 0;
        $map = [];
        $max = 0;
        $left = 0;
        for($i = 0; $i < strlen($s); $i++){
            if(array_key_exists($s[$i],$map)){
                $left = max($left, $map[$s[$i]] + 1);
            }
            $map[$s[$i]] = $i;
            $max = max($max,$i-$left+1);
        }
        return $max;
    }
}

方法二:

思路:逐个检查所有的子字符串,看它是否包含有重复的字符。

$str = "";
function lengthOfLongestSubstring($s) {
    $strlen = strlen($s);
    if($strlen<=1){
        return $strlen;
    }
    $subStrlen = [];


    for($i=0;$i<$strlen;$i++){
        $subStrArr = [];
        $subStrArr[] = $s[$i];
        for($j=$i+1;$j<$strlen;$j++){
            $subStrArr[] = $s[$j];
            if(count(array_unique($subStrArr))!=count($subStrArr)){
                array_pop($subStrArr);
                break;
            }


        }
        $subStrlen = count($subStrArr)>count($subStrlen)?$subStrArr:$subStrlen;
    }
    return count($subStrlen);
}
$a = lengthOfLongestSubstring($str);
print_r($a)

方法三

如果从索引 i 到 j – 1 之间的子字符串s[i,j)已经被检查为没有重复字符。我们只需要检查 s[j] 对应的字符是否已经存在于子字符串 s[i,j) 中。

function lengthOfLongestSubstring($s) {        $len = strlen($s);        if ($len < 2){            return $len;        }        $win = [];        $res_len = 0;        $i = 0;        $j = 0;        while ($i<$len && $j<$len){            if(!in_array($s[$i],$win)){                $win[]= $s[$i++];                $res_len = max($res_len,$i-$j);
            }else{                $j++;                array_shift($win);            }        }        return $res_len;    }

嗯 简单试了一下 差不多是上面方法的20倍 并且随着字符串的长度增长会更大  因为他是O(n)  

方法四:优化版滑动窗口

  function lengthOfLongestSubstring($s)
{
        $len = strlen($s);
        $j = 0;
        $i = 0;
        $maxStrLen = 0;
        $set = [];
        while ($j<$len){
            if(array_key_exists($s[$j],$set)){
                $i = max($i,$set[$s[$j]]);


            }
            $maxStrLen = max($maxStrLen,$j-$i+1);
            $set[$s[$j]]=$j+1;
            $j++;
        }
        return $maxStrLen;
    }

使用Golang方法

package main


import "fmt"
//最长不含有重复字符的子串
func lenthOfNonRepeatingSubstr(s string) int {
  lastOccurred := make(map[byte]int)
  start := 0
  maxLength := 0
  for i, ch := range []byte(s) {
    if lastI, ok := lastOccurred[ch]; ok && lastI >= start {
      start = lastI + 1
    }
    if i-start+1 > maxLength {
      maxLength = i - start + 1
    }
    lastOccurred[ch] = i
  }
  return maxLength
}


func main() {
  fmt.Println(lenthOfNonRepeatingSubstr("abcabcbb")) //3
  fmt.Println(lenthOfNonRepeatingSubstr("bbbbb"))    //1
  fmt.Println(lenthOfNonRepeatingSubstr("pwwkew"))   //3
}

用 PHP和Golang 来刷leetCode 之 无重复字符 最长子串

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111720.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深入浅出Nginx

    深入浅出Nginx

    2022年2月15日
    72
  • python中矩阵的转置怎么写_Python 矩阵转置的几种方法小结

    python中矩阵的转置怎么写_Python 矩阵转置的几种方法小结我就废话不多说了,直接上代码吧!#Python的matrix转置matrix=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]defprintmatrix(m):foreleinm:foriinele:print(“%2d”%i,end=””)print()#1、利用元祖的特性进行转置deftransformMatrix(m):#此处巧妙的先按照传递…

    2022年5月5日
    114
  • 手把手教你opencv做人脸识别(附源码+文档)

    手把手教你opencv做人脸识别(附源码+文档)文章目录一、环境二、使用Haar级联进行人脸检测三、Haar级联结合摄像头四、使用SSD的人脸检测五、SSD结合摄像头人脸检测六、结语一、环境pipinstallopencv-pythonpython3.9pycharm2020人狠话不多,直接上代码,注释在代码里面,不说废话。二、使用Haar级联进行人脸检测测试案例:代码:(记得自己到下载地址下载对应的xml)#coding=gbk”””作者:川川@时间:2021/9/516:38https://github.

    2022年6月8日
    50
  • 2018一切刚刚开始

    简单计划,努力工作,坚持输出,积极生活,让生活更加美好。开始新的一年的第一周工作,生活从新年中慢慢回归,慢慢进入节奏。每一年都会写一些新的开始的计划,然后到年终的时候很多计划都没有实现,但是不能因为很多没有实现就不去写新一年的一些想法,万一今年实现了呢?努力工作在一家公司,从一个新员工慢慢开始变成老员工了,思维方面要调整,还要有新员工的那份热情,也要老员工相应的承担了,要承…

    2022年2月27日
    35
  • 手把手教你做一个安卓点餐系统

    手把手教你做一个安卓点餐系统撸一个安卓系统……

    2022年6月19日
    30
  • 新网站500内部服务器错误,解决网站http服务器内部500错误[通俗易懂]

    新网站500内部服务器错误,解决网站http服务器内部500错误[通俗易懂]针对此问题关键解决办法:WEB站点右键属性——》目录(配置)–》选项–》启用父路径WEB站点目录要有iusr用户,并且iusr用户(如果是新建的用户也要给权限)要用读取、写入权限(如果里面不需要运行asp、php脚本就不需要给写入)2、一般情况如果客户端ie开启了查看程序错误,可以看到详细的错误,可以根据错误提示到百度搜索即可。3、针对iis访问量过大的原因,例如asp无法访问了,但php却可以…

    2022年8月12日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号