用 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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • java8 Lambda表达式

    java8 Lambda表达式java8 Lambda表达式

    2022年4月23日
  • 如何理解Python 面向对象编程思想

    如何理解Python 面向对象编程思想Python面向对象编程思想:从四个方面来理解1.宽泛的面向对象的概念举例说明面向过程:做一件事情,从头到尾,每一个细节都要关注,重点在于过程面向对象:做一件事情,用对象去做,不关心细节和过程,万物皆对象

    2022年10月26日
  • pb数据库连接_jdbc连接mysql中文乱码

    pb数据库连接_jdbc连接mysql中文乱码最近需要用pb联mysql做个项目,查网上有关的方法,很多都没说清楚,所以在这里总结下:  采用JDBC连接,首先去MYSQL官网下载mysql-connector-java-5.0.7.rar JDBC驱动打开PB,菜单Tools–>systemoptions,打开JAVA选项,点击新增文件(白色文件图标)选择刚解压的mysql-connector-java

    2022年9月8日
  • matplotlib绘图基础[通俗易懂]

    matplotlib绘图基础[通俗易懂]http://blog.csdn.net/pipisorry/article/details/37742423matplotlib介绍matplotlib是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都

    2022年5月24日
  • DenseNet详解[通俗易懂]

    DenseNet详解[通俗易懂]其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。书的购买链接 书的勘误,优化,源代码资源一、概述作为CVPR2017年的BestPaper,DenseNet脱离了加深网络层数(ResNet)和加宽网络结构(Inception)来提升网络性能的定式思维,从特征的角度考虑,通过特征重用和旁路(Byp…

    2022年9月29日
  • jvm内存模型、jvm内存结构、Java内存结构、Java内存模型(JMM)、Java对象模型的区别(吐血研究整理)

    jvm内存模型、jvm内存结构、Java内存结构、Java内存模型(JMM)、Java对象模型的区别(吐血研究整理)jvm内存模型:JVM内存模型则是指JVM的内存分区。jvm内存结构:等同于Java内存结构,汉语虽然博大精深,但是也经常会因为命名很雷同让人懵逼或者混淆不清。Java内存结构:Java内存模型(JMM):java内存模型又称为JMM。为了解决Java多线程对共享数据的读写一致性问题,通过Happens-Before语义(延伸出了as-if-serial)定义了Java程序对数据的访问规则,修正之前由于读写冲突导致的Cache数据不一致的问题。具体到HotspotVM的实现..

    2022年5月10日

发表回复

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

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