统计01串在另一个01串的匹配可能性

<!-- 方法一 -->
<script>
	function count(str1, str2){
		var reg1 = str2.replace(/\?/g, '(0|1)'),
			reg = new RegExp(reg1,'g'),
			len =str1.length - str2.length + 1,
			array = [];
		console.log(reg1)
		// 改变搜索的起始位置
		for(var i = 0; i < len; i++ ){
			var arr1 =  reg.exec(str1);
			if(arr1[0]){
				array.push(arr1[0])
			}
			reg.lastIndex = i + 1;
			// console.log(arr1)
		}

		 console.log(array);
		if(array[0] === 'undefined'){
			return 0;  //没有匹配到
		}else{
			return '正则:' + strNum(array); 
		}
	
	}

	// 去除数组相同的元素
	function strNum(array){
		array.sort(function(a,b){
			return a - b;
		})

		// console.log(array)

		var newArray = [];
		newArray.push(array[0])
		for(var i = 1, len = array.length; i < len ;i++){
			if(array[i] != array[i-1]){
				newArray.push(array[i]);
			} ;
			
		}

		console.log(newArray)

		return newArray.length;
	}
	
		
	console.log(count('01010011','???'));
</script>

<!-- 方法二 :2两次for循环 -->
<script>
	function count(str1, str2){
		var arr1 = str1.split(''),
			arr2 = str2.split(''),
			len1 = arr1.length,
			len2 = arr2.length,
			array=[];

		for(var i = 0 ; i < len1 - len2 + 1; i++){
			var arr3 = arr1.slice(i,len2 + i);
			// console.log(arr3);
			var flag = true;

			for(var j = 0; j < len2 ; j++){
				
				if(arr2[j] != '?' && arr2[j] != arr3[j]){
					flag = false;
				}

			}
			if(flag){
					array.push(arr3.join(''));
			}
		}

		// console.log(array)
		if(array[0] === 'undefined'){
			return 0;
		}else{
			return  '2次for循环:' + strNum(array); 
		}
		
	
	}

	// 去除数组相同的元素
	function strNum(array){
		array.sort(function(a,b){
			return a - b;
		})

		// console.log(array)

		var newArray = [];
		newArray.push(array[0])
		for(var i = 1, len = array.length; i < len ;i++){
			if(array[i] != array[i-1]){
				newArray.push(array[i]);
			} ;
			
		}

		// console.log(newArray)

		return newArray.length;
	}
	
		
	console.log(count('01010011','???'));
</script>

猜你喜欢

转载自blog.csdn.net/qq_30422457/article/details/81116674