详解 js经典面试题 之 找出字符串中出现最多的字符和次数

     在js的笔试中,这道题出现的概率还是比较高的.下面简单聊聊这道题

     首先说,这道题的解法有很多种,为了便于理解.今天介绍一种我认为最简单最易理解的一种解法 "对象法".下面上案例,

     

let str = 'djaouoiutjjjjj';     // 定义字符串
 		var obj = {};           // 先定义一个空对象,稍后使用.

 	for (var i = 0; i < str.length; i++) {            //   循环字符串中每一项
 		var k = str[i];                      // 把每一项保存给变量 k (对这一步不理解可先熟悉 
                                                for循环机制);
 		if (obj[k]) {                        
                                               
 			obj[k] ++;
 		} else {
 			obj[k] = 1;
 		}
 	}

 	console.log(obj);   // 输出{d: 1, j: 6, a: 1, o: 2, u: 2, …};

 	let num = 0;
 	let value = null;
 	for (var j in obj) {
 		if (obj[j] > num) {
 			num = obj[j];
 			value = j;
 		}
}

console.log(value, num);    // 输出 "j" 6 

    

            从if判断开始说明:        如果对象中有obj[k],因为循环开始时,此时 obj[k]每一项一定是空字符串.循环完一次后,一定 有一项 obj[k]为'1';然后进行第二次循环,这时候  进入if判断.如果对象中有obj[k],也就是和第一次 循环的字符串是同一个.那么,第一次循环的  obj[k]: '1';就变为obj[k]: '2';相反,如果没 有这个字符串,那么,增加这个字符串的value值为  1; obj[k]: '1'.如此往复; 也就是说 循环开始后的对象应该是这样的:   

let obj = {
    "d": '',
    "j": '',
    "a": '',
    "o": '',
    "u": '',
    "o": ''
       ...      
}

 然后逐渐变为:

let obj = {
    "d": '1',
    "j": '1',
    "a": '1',
    "o": '2',  // 字符串'o'是第一次重复的.如果重复,这个数字就++.否则就让value值由空变为1.
    "u": '1',
       ...
}

 最后变为这样:

let obj = {
    "d": 1,
    "j": 6,
    "a": 1,
    "o": 2,
    "u": 2
}

     估计看到这儿都明白了,最后的for in循环就是输出出现次数最多的字符串和次数.应该不用说明了.

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页