class Solution {
public:
string bestHand(vector<int>& ranks, vector<char>& suits) {
}
};
2347. 最好的扑克手牌
给你一个整数数组 ranks
和一个字符数组 suit
。你有 5
张扑克牌,第 i
张牌大小为 ranks[i]
,花色为 suits[i]
。
下述是从好到坏你可能持有的 手牌类型 :
"Flush"
:同花,五张相同花色的扑克牌。"Three of a Kind"
:三条,有 3 张大小相同的扑克牌。"Pair"
:对子,两张大小一样的扑克牌。"High Card"
:高牌,五张大小互不相同的扑克牌。请你返回一个字符串,表示给定的 5 张牌中,你能组成的 最好手牌类型 。
注意:返回的字符串 大小写 需与题目描述相同。
示例 1:
输入:ranks = [13,2,3,1,9], suits = ["a","a","a","a","a"] 输出:"Flush" 解释:5 张扑克牌的花色相同,所以返回 "Flush" 。
示例 2:
输入:ranks = [4,4,2,4,4], suits = ["d","a","a","b","c"] 输出:"Three of a Kind" 解释:第一、二和四张牌组成三张相同大小的扑克牌,所以得到 "Three of a Kind" 。 注意我们也可以得到 "Pair" ,但是 "Three of a Kind" 是更好的手牌类型。 有其他的 3 张牌也可以组成 "Three of a Kind" 手牌类型。
示例 3:
输入:ranks = [10,10,2,12,9], suits = ["a","b","c","a","d"] 输出:"Pair" 解释:第一和第二张牌大小相同,所以得到 "Pair" 。 我们无法得到 "Flush" 或者 "Three of a Kind" 。
提示:
ranks.length == suits.length == 5
1 <= ranks[i] <= 13
'a' <= suits[i] <= 'd'
原站题解
golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-02-20 22:49:37
func bestHand(ranks []int, suits []byte) string { if bytes.Count(suits, suits[:1]) == 5 { return "Flush" } cnt, pair := map[int]int{}, false for _, r := range ranks { cnt[r]++ if cnt[r] == 3 { return "Three of a Kind" } if cnt[r] == 2 { pair = true } } if pair { return "Pair" } return "High Card" }
javascript 解法, 执行用时: 64 ms, 内存消耗: 41.1 MB, 提交时间: 2023-02-20 22:49:17
/** * @param {number[]} ranks * @param {character[]} suits * @return {string} */ var bestHand = function(ranks, suits) { const suitsSet = new Set(); for (const suit of suits) { suitsSet.add(suit); } if (suitsSet.size === 1) { return "Flush"; } const h = new Map(); for (const rank of ranks) { h.set(rank, (h.get(rank) || 0) + 1); } if (h.size === 5) { return "High Card"; } for (const value of h.values()) { if (value > 2) { return "Three of a Kind"; } } return "Pair"; };
python3 解法, 执行用时: 36 ms, 内存消耗: 15 MB, 提交时间: 2023-02-20 22:49:00
class Solution: def bestHand(self, ranks: List[int], suits: List[str]) -> str: if len(set(suits)) == 1: return "Flush" h = Counter(ranks) if len(h) == 5: return "High Card" for [a, b] in h.items(): if b > 2: return "Three of a Kind" return "Pair"
java 解法, 执行用时: 0 ms, 内存消耗: 38.8 MB, 提交时间: 2023-02-20 22:48:46
class Solution { public String bestHand(int[] ranks, char[] suits) { boolean flush = true; for (int i = 1; i < 5 && flush; ++i) { flush = suits[i] == suits[i - 1]; } if (flush) { return "Flush"; } int[] cnt = new int[14]; boolean pair = false; for (int x : ranks) { if (++cnt[x] == 3) { return "Three of a Kind"; } pair = pair || cnt[x] == 2; } return pair ? "Pair" : "High Card"; } }
python3 解法, 执行用时: 44 ms, 内存消耗: 14.9 MB, 提交时间: 2022-08-05 15:01:00
class Solution: def bestHand(self, ranks: List[int], suits: List[str]) -> str: book = ['', "High Card", "Pair", "Three of a Kind", "Three of a Kind", "Three of a Kind"] return 'Flush' if len(set(suits)) == 1 else book[Counter(ranks).most_common(1)[0][1]]
golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2022-08-05 14:59:21
func bestHand(ranks []int, suits []byte) string { if bytes.Count(suits, suits[:1]) == 5 { return "Flush" } cnt, pair := map[int]int{}, false for _, r := range ranks { cnt[r]++ if cnt[r] == 3 { return "Three of a Kind" } if cnt[r] == 2 { pair = true } } if pair { return "Pair" } return "High Card" }