問題
文字列 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
}
私も誰に勝ったかわかりません 解散。





