Un pequeño caso de la versión mejorada del algoritmo BF (búsqueda de cadenas)

Realiza la función:

1. Entrar en una cadena genética biológica,

2. Ingrese la cadena de genes del virus, la cadena de genes del virus es un anillo

3. Para determinar si está infectado

Mostrar resultados:

 El principio del código utiliza el método exhaustivo BF mencionado en mi último artículo. Si tiene alguna pregunta, puede consultarla.

Luego ve directamente al código.

<!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>

No es fácil de escribir, ¡dale un pulgar hacia arriba!

 

Supongo que te gusta

Origin blog.csdn.net/fightingLKP/article/details/126249880
Recomendado
Clasificación