これは随分前に書いたものですが、その時王卓さんのデータ構造の動画を見て感じたので書き直しました。本題に入る
実装機能:文字列の中から文字列を探す
アプリケーション シナリオ:生物学的遺伝子鎖でウイルス遺伝子鎖を見つける
アッパーコード
// 面试题: 在str1 里面查找 str2 的位置,并以一个数组的形式输出 出来
// 答案 :[1, 5, 12, 19]
var str1 = 'ssjhgsjhffdgsjhdfsfsjh'
var str2 = 'sjh'
// bf算法穷举
function bf(s, t) {
let i = 0
let j = 0
var arr = []
// debugger
while (i <= s.length && j <= t.length) {
if (s[i] == t[j]) {
i++
j++
if (j > t.length - 1) {
arr.push(i - t.length)
if (i >= s.length - t.length + 1) {
return arr
}
}
} else {
i = i - j + 1
j = 0
if (i >= s.length - 1) {
return arr
}
}
}
}
console.log(bf(str1, str2));
// indexOf 就是上面的语法糖
// console.log(str1.indexOf(str2));
アルゴリズムを改善するために再帰を使用することも可能です
ただ、差し替えの際に対処が必要です. 123と書きましたが、データ量が比較的多い場合は、代わりにシンボルデータを使用することをお勧めします.
// 可以用递归
let arrIndex = []
function index(str1,str2){
if(str1.indexOf(str2)!==-1){
arrIndex.push(str1.indexOf(str2))
str1 = str1.replace(str2,'123')
index(str1,str2)
}
return arrIndex
}
console.log(index(str1,str2));
お兄さんやお姉さんは、「いいね!」をすることを歓迎します。コメント欄にメッセージを残して話し合いましょう!