您好,登錄后才能下訂單哦!
如何用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 問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。