这个题首先判断数据合不合法,如果某一个数字超过4个就是不合法 然后贪心
贪心的策略是 先找到一个对子,然后把这个对子从手牌里删去,看手牌里有没有四个顺子或刻子
import java.util.*;
public class Main
{
static int tsum[]=new int[100];
public static boolean check()
{
int sum[]=new int[20];
for(int i=1;i<=9;i++) sum[i]=tsum[i];
int cnt=0;
for(int i=1;i<=9;i++)
{
if(sum[i]>=3){sum[i]-=3;cnt++;}
while(i<=7&&sum[i]!=0&&sum[i+1]!=0&&sum[i+2]!=0)
{
cnt++;
sum[i]--;
sum[i+1]--;
sum[i+2]--;
}
}
if(cnt==4)return true;
return false;
}
public static void main(String[]args)
{
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
while(t-->0)
{
for(int i=0;i<100;i++)tsum[i]=0;//初始化数组tsum
String a=sc.next();
char[]array=a.toCharArray();
Arrays.sort(array);
String str=new String(a);
int no=1;
int error=0;
for(int i=0;i<str.length()&&error==0;i++)
{
tsum[str.charAt(i)-'0']++;
if(tsum[str.charAt(i)-'0']>4)
{
System.out.println("The data is error!");
error=1;
break;
}
}
if(error!=0)continue;
for(int i=1;i<str.length()&&no!=0;i++)
{
if(str.charAt(i)==str.charAt(i-1))
{
tsum[str.charAt(i)-'0']--;
tsum[str.charAt(i-1)-'0']--;
if(check())
{
no=0;
break;
}
tsum[str.charAt(i)-'0']++;
tsum[str.charAt(i-1)-'0']++;
}
}
if(no!=0)System.out.println("NO");
else System.out.println("YES");
}
}
}