文字列検索文字列 (手裂き BF アルゴリズム、王卓先生、青島大学版)

       これは随分前に書いたものですが、その時王卓さんのデータ構造の動画を見て感じたので書き直しました。本題に入る

 

実装機能:文字列の中から文字列を探す

アプリケーション シナリオ:生物学的遺伝子鎖でウイルス遺伝子鎖を見つける

アッパーコード

            // 面试题: 在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));

お兄さんやお姉さんは、「いいね!」をすることを歓迎します。コメント欄にメッセージを残して話し合いましょう!

おすすめ

転載: blog.csdn.net/fightingLKP/article/details/126249546