網上已經有很多解析了,就不廢話了。
主要注意一下幾點:
- P、A、T三個字符都要出現。(測試點2)
- P、T僅且出現一次。
- P在T之前。
- P和T之間至少有一個A。
- P左邊A的數量 * P和T之間A的數量 = T右邊A的數量。
代碼簡單易懂,就是判斷上面幾個條件。
#include <stdio.h>
int isRight(char *s)
{
int i = 0,j = 0, count_p = 0, count_t = 0;
int arr[3] = {0};
while(s[i] != '\0')
{
switch(s[i])
{
case 'A':
if(j > 2)
{
return 0;
}
arr[j] += 1;
break;
case 'P':
count_p++;
if(count_p > 1 || j >= 1)
{
return 0;
}
j++;
break;
case 'T':
count_t++;
if(count_t > 1 || j < 1)
{
return 0;
}
j++;
break;
default:
return 0;
}
i++;
}
if(arr[1] != 0 && arr[0] * arr[1] == arr[2] && count_t && count_p)
{
return 1;
}
return 0;
}
int main()
{
int n, i;
char str[100];
scanf("%d", &n);
for(i = 0; i < n; i++)
{
scanf("%s", str);
if(isRight(str))
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}```