1. 题目
2. 思路
借助set和map
- 如果suits中的元素去重后只有一个,说明是五张相同花色的扑克牌,即Flush;
- 如果ranks中的元素去重后还是5个,没有重复的,说明是五张大小互不相同的扑克牌,即High Card;
- 对ranks中的元素个数进行统计,如果出现次数最多的元素的次数大于2,说明是至少有3张大小相同的扑克牌;
- 否则,是对子。
3. 代码实现
/**
* @param {number[]} ranks
* @param {character[]} suits
* @return {string}
*/
var bestHand = function(ranks, suits) {
let map = new Map()
if (new Set(suits).size === 1) return 'Flush'
if (new Set(ranks).size === 5) return 'High Card'
for (let cnt of ranks) {
map.set(cnt, (map.get(cnt) || 0) + 1)
}
if (Math.max(...map.values()) > 2) return 'Three of a Kind'
else if (Math.max(...map.values()) === 2) return 'Pair'
};