BF アルゴリズム (文字列検索) のアップグレード版の小さなケース

関数を実現します。

1. 生物学的遺伝子鎖を入力し、

2.ウイルス遺伝子鎖を入力します。ウイルス遺伝子鎖はリングです

3.感染しているかどうかを判断する

結果を示す:

 コードの原理は、前回の記事で紹介した BF 網羅法を使っていますので、不明な点があれば参考にしてください。

次に、コードに直接移動します

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        h1 {
            position: absolute;

            top: 80px;
            left: 50%;
            transform: translate(-50%);
            text-align: center;
        }

        div {
            width: 400px;
            height: 200px;
            border: 2px solid rgb(49, 30, 225);
            margin: 150px auto;
            padding: 20px;
            text-align: center;
            box-sizing: border-box;
        }

        input {
            width: 80%;
            height: 30px;
            margin-bottom: 15px;
            padding-left: 10px;
        }

        p {
            margin-top: 10px;
        }
    </style>
</head>

<body>
    <h1>新馆病毒基因链检测</h1>
    <div>
        <input type="text" placeholder="请输入查询患者的基因链" class="test">
        <input type="text" placeholder="请输入病毒基因链" class="vir">
        <button>点击检测</button>
        <p>显示结果</p>
    </div>


    <script>
        // 获取元素
        var test = document.querySelector('.test')
        var vir = document.querySelector('.vir')
        var btn = document.querySelector('button')
        var p = document.querySelector('p')

        // 病毒基因链  病毒基因链是环状的

        // 把病毒的基因数列翻倍 然后依次截取一组的长度  截取n(病毒的长度)次
        function start() {
            // var pname = 'adsfssjhgasdsjhdgdfghfghdfghasasas'    //待检测基因链
            // var vname = 'asd'
            var pname = test.value   //待检测基因链
            var vname = vir.value

            // var pname = localStorage.getItem('pname')    //待检测基因链
            // var vname = localStorage.getItem('vname')
            console.log('检测者基因链:\t'+pname);

            function getVirus(str) {  // str 是需要处理的病毒基因链
                var str1 = str.concat(str) // 首先翻倍
                let i = 0;
                let j = str.length
                let arr = []   // 创造新数组
                //构造所有可能的病毒数组
                return ((function getVirusArr(s, i) {  // 形参代表  需要处理的数组
                    if (i >= j) {
                        return arr
                    } else {
                        arr.push(s.slice(i, i + j))
                        return getVirusArr(s, i + 1)
                    }
                })(str1, i))
            }
            var vnameArr = getVirus(vname)   // 接收病毒基因链的数组
            console.log('病毒基因链组合:\t'); //  打印病毒基因链数组
            console.log(vnameArr);
            // 下面是用循环检测每一个病毒基因链
            var flag = true

            for (var i = 0; i < vnameArr.length; i++) {
                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
                            }
                        }
                    }
                }
                let result = bf(pname, vnameArr[i])
                if (result.length > 0) {
                    flag = false
                    console.log('患者已经感染,病毒基因链:' + vnameArr[i] + '\t在患者基因链中出现的位置为\t' + result);
                } else {
                    console.log('检测者体内不存在\t' + vnameArr[i] + '\t病毒基因链');

                }

            }
            if (flag) {
                p.innerHTML = '没有感染'


            } else {
                p.innerHTML = '已经感染'
                flag = true
            }

        }

        //点击按键  调动检测机器(函数)
        btn.onclick = function () {
    
            start()

            test.value = ''
            vir.value = ''
            // start()
        }
    </script>
</body>

</html>

書くのは簡単ではありません、親指を立ててください!

 

おすすめ

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