用 PHP和Golang 來(lái)刷leetCode 之 無(wú)重復(fù)字符 最長(zhǎng)子串
精選文章
免費(fèi)獲取Git GO Java視頻教程
Go語(yǔ)言生成二維碼是如此簡(jiǎn)單
漲見(jiàn)識(shí)| 字節(jié)PHP/Golang社招面經(jīng)
一文讓你知道為什么學(xué)了PHP的都要轉(zhuǎn)學(xué)Go語(yǔ)言

方法一
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;}}
方法二:
思路:逐個(gè)檢查所有的子字符串,看它是否包含有重復(fù)的字符。
$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)已經(jīng)被檢查為沒(méi)有重復(fù)字符。我們只需要檢查 s[j] 對(duì)應(yīng)的字符是否已經(jīng)存在于子字符串 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; }
嗯 簡(jiǎn)單試了一下 差不多是上面方法的20倍 并且隨著字符串的長(zhǎng)度增長(zhǎng)會(huì)更大? 因?yàn)樗荗(n)??
方法四:優(yōu)化版滑動(dòng)窗口
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 mainimport "fmt"//最長(zhǎng)不含有重復(fù)字符的子串func lenthOfNonRepeatingSubstr(s string) int {lastOccurred := make(map[byte]int)start := 0maxLength := 0for 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")) //3fmt.Println(lenthOfNonRepeatingSubstr("bbbbb")) //1fmt.Println(lenthOfNonRepeatingSubstr("pwwkew")) //3}
評(píng)論
圖片
表情
