真题连接: leetcode.cn/problems/be…
了解句意:
- 有五张同样花色扑克游戏,与五张扑克游戏只有一种颜色含意同样
- 五张尺寸互相不同样的扑克游戏,与一共有五种大小的小扑克游戏含意同样
- 该题要区别颜色和尺寸各自统计数量
解题技巧:
- 首先用
Set
统计分析共有多少种花色,如果仅仅是一种,表明有“五张同样花色扑克游戏” - 用
Map
统计分析每一种大小的小扑克游戏一共有多张- 假如
rankMap.size
为5
,表明有“五张尺寸互相不同样的扑克游戏” - 假如
rankMap
含有牌的总数高于或等于3
,即是“三条” - 假如
rankMap
有牌的数量等于2
,即是“对联”
- 假如
/**
* @param {number[]} ranks
* @param {character[]} suits
* @return {string}
*/
var bestHand = function (ranks, suits) {
// 应用Set统计分析有多少种花色
let suitSet = new Set()
for (const suit of suits) {
suitSet.add(suit)
}
// 如果仅仅是一种颜色,表明相同颜色有5张
if (suitSet.size === 1) {
return 'Flush'
}
// 应用Map统计分析每一种尺寸牌的总数
let rankMap = new Map()
for (const rank of ranks) {
rankMap.set(rank, (rankMap.get(rank) ?? 0) 1)
}
// 若是有五种尺寸,表明有五张尺寸互相不同样的扑克游戏
if (rankMap.size === 5) {
return 'High Card'
}
// 查询不一样大小的小牌都是有多张
for (const count of rankMap.values()) {
// 大等于3张都为“三条”
if (count >= 3) {
return 'Three of a Kind'
}
}
// 剩下来的仅有“对联”一种很有可能
return 'Pair'
}
复杂度分析
- 算法复杂度:
O(n)
- 空间复杂度:
O(n)