blog

パワーバックル392 判定 後半 問題 解答

文字列sとtが与えられたとき、sがtの部分列であるかどうかを判定しなさい。誰に勝ったかわかりません。 次のレッスン...

Jan 29, 2020 · 2 min. read
シェア

問題

文字列 s と t が与えられたとき、s が t の部分文字列かどうかを判定しなさい。

sとtは小文字の英字だけを含むと考えることができる 文字列tは非常に長くなる(長さ ~= 500,000),で、sは短い文字列(長さ <=100)。
文字列の部分列とは、元の文字列から、残りの文字の相対的な位置を変えずにいくつかの文字を削除することによって形成される新しい文字列のことである。
示例 1:
s = "abc", t = "ahbgdc"
返回 true.
示例 2:
s = "axc", t = "ahbgdc"
返回 false.

分析済み

var isSubsequence = function(s, t) {
 if(s.length > t.length) { // 最初にストリングの長さを判断する
 return false
 } else if(s == t) { // 対等かどうかを判断する
 return true
 }
 var stack = '' // 空の文字列を作る
 var index = 0 //カウンターを作る
 while(index < t.length) {
 if(t[index] !== s[index]) {
 t = t.replace(t[index],'')
 } else {
 stack += t[index]
 index++
 }
 if(stack == s) {
 return true
 }
 }
 return false
}

スタックに切り替えるというアイデアは、実際にはよりよく理解されています。

var isSubsequence = function(s, t) {
 //スタック思考を使う
 if(s.length > t.length){ // 最初にストリングの長さを判断する
 return false
 } else if(s == t){ // 対等かどうかを判断する
 return true
 }
 var s = s.split('')
 for(var i = 0; i < t.length; i++){
 if(t[i] == s[0]) { // ループして部分文字列の最初の文字と比較する
 s.shift() // 親文字列にその文字が存在する場合、その文字を削除して比較を続ける
 }
 if(s.length == 0) { // 文字列がすべてマッチするまで、文字列が部分文字列であることを述べる
 return true
 }
 }
 return false
}

私も誰に勝ったかわかりません 解散。

Read next

デジタル通貨に投資する正しい方法

現在市場で多くの投資家のような頭のないハエのように毎日さまよい、投資家の多くは、ますますせっかちで、そこにさえ、彼らは良いではありませんが、先生を見つける必要がないことを感じ始めるだけで、多額の資金を失った後、操作を開始するのかわからないがたくさんあります、物事を学ぶことではありません。なぜいつも戦場まで待たなければならない、彼らの武器が壊れていることを見つけるために、武器がないことを見つけるために。毎日千引用サブを見て...

Jan 29, 2020 · 1 min read