题目描述
实现思路
直接模拟,先遍历suit数组判断是否是同花。然后对ranks数组进行排序,然后遍历数组,通过模拟不同牌时记录前一张牌的下标,然后牌相同时,相减得到与前面不同牌时的中间牌的数,记录最大中间牌,然后通过判断,返回对应字符串
代码实现
class Solution {
public String bestHand(int[] ranks, char[] suits) {
int ans = 0;
for (int i = 1; i < suits.length; i++) {
if(suits[i] - suits[i-1] != 0){
ans = 1;
break;
}
}
if(ans == 0){
return "Flush";
}
Arrays.sort(ranks);
ans = 1;
int sameEle = 0;
int flagBegin = -1;
int flag = 0;
for (int i = 1; i < ranks.length; i++) {
if(ranks[i] -ranks[i-1] == 0){
ans++;
flag = 0;
}else{
flagBegin = i-1;
flag = 1;
}
if(flag == 0){
sameEle = Math.max(sameEle, i - flagBegin);
}
}
if(ans >=3 && sameEle >=3){
return "Three of a Kind";
}else if(ans >= 2){
return "Pair";
}else{
return "High Card";
}
}
}
时间复杂度为O(n)