js实现KMP与两个随机数组取最大的三个数的和比大小

  1. KMP模式匹配算法
    思想:目标串 a 下标为 i 与模式串 b 下标为 j 自第一个字符开始比较,相等则,i、j 同时自增,如果不等则 b[j] = next[j] 。next数组是根据模式串 b 得出的,可以大致理解为,b[j]当前下标之前有多个前缀等于后缀。话不多说,上代码
// An highlighted block
        (function speedOrder(){
    
    
            let a = "abcadbacabcabcdab";
            let b = "bcabcd"; 
            
            console.log(mate(a,b))

            /**
             *  主串与模式串匹配 
             */
            function mate(objString,mateString){
    
    
                 /**
                 * 获取next()数组
                 */
                 function getNext(orderString){
    
    
                    let next = [-1]
                    let k = -1
                    let j = 0
                    while(j < orderString.length-1){
    
    
                        if( k == -1 || orderString[j] == orderString[k]){
    
    
                            j++
                            k++
                            if(orderString[j] != orderString[k]){
    
    
                                next[j] = k 
                            }else{
    
    
                                next[j] = next[k]
                            }
                        }else{
    
    
                            k = -1
                        }
                    }
                    return next
                }            

                const next = getNext(b); 
                console.log(next)
                let i = 0;
                let j = 0; 
                while( i < objString.length && j < mateString.length ){
    
    
                    if( j==-1 || objString[i] == mateString[j] ){
    
    
                        i++;
                        j++;
                    }else{
    
    
                        j=next[j];
                    }
                }
                if(j==mateString.length){
    
    
                    return true
                }
                return false
            }            
        })()
对于KMP而言最重要的就是理解next数组,我暂时只能理解未优化的next数组,代码中是优化后的,所以我在此就不多做解释。
  1. 两个随机数组取最大的三个数的和比大小
    思想:先对随机数组排序,升序取后三位,降序取前三位相加。代码如下
function zjh(size){
    
    									//指定随机数个数
    let a = [];
    let b = [];
    for(let i = 0 ; i < size ; i++){
    
    
        a.push(parseInt(Math.random()*10));			
        b.push(parseInt(Math.random()*10));
    }
    console.log(a)
    console.log(b)
    a.sort();										//排序方法,升序
    b.sort();
    console.log(a)
    console.log(b)

    let person1=add(a[size-1],a[size-2],a[size-3]);
    let person2=add(b[size-1],b[size-2],b[size-3]);

    if(person1>=person2){
    
    
        console.log(person1)
    }else{
    
    
        console.log(person2)
    }
	
	/**
	  * 求和方法
	  */
    function add(){
    
    
        let size=Array.from(arguments);				//转换类数组
        let sum = 0 ;
        for(let s of size){
    
    
            sum += s;
        }
        return sum;
    }
}
zjh(5)

猜你喜欢

转载自blog.csdn.net/weixin_43889562/article/details/104987538
今日推荐