题解 | #字符串操作#
字符串操作
http://www.nowcoder.com/questionTerminal/4b416a55d9a84da597c36baf54afa469
此次的字符串操作中,需要得到最小的配对次数。
首先我们采取贪心的方法将每一个能够配对的两个相同的字母生成一个和之前不冲突的新字母。 还需要去判断(新生成的字母+原先有的字母)的个数是否大于26个,如果大于26个说明有重复的字母存在,那么就需要将后面重复的字母和前面重复的字母进行合并(配对次数为后续多出来的重复字母)。如果没有大于说明可以直接用第一次配对的次数
详细可以看图理解
实现代码:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回满足题意的最小操作数
* @param str string字符串 给定字符串
* @return int整型
*/
function minOperations( str ) {
// write code here
const map = new Map();
for(let s of str) {
map.set(s, (map.get(s) || 0) + 1);
}
let count = 0;
let single = 0;
const keys = map.keys();
for(let key of keys) {
let value = map.get(key);
count += (value >> 1);
if(value % 2 === 1) {
single ++;
}
}
return single + count > 26 ? str.length - 26 : count ;
}
module.exports = {
minOperations : minOperations
};
