先把这个题的题意搞懂
1、这个字符串中只能有’P’ ‘A’ 'T’这三个字符
2、xPATx
可以成功,说明P前面的A和后T后边的A的个数相同时答案正确,且此时PT之间只能有一个A
3、aPbTc
和 aPbATca
可以成功,说明P前面的A的个数*PT之间的A的个数等于T后边的个数的话,答案正确
综上所述
要确定这个字符串是否正确
第一必须含有PAT三个字符,而且P和T只能出现一次
第二T之后A的个数 是 P之前的个数与PT之间个数的乘积
接下来写代码
刚开始也是没有思路,看到了别的解题用map函数来求 挺好理解的,直接拿大佬代码学习了一波。
#include <iostream>
#include <map>
using namespace std;
int main()
{
int n;
int p=0,t=0; //p和t分别是‘P’和‘T’在字符串中的位置
cin>>n;
string s;
for(int i=0;i<n;i++)
{
cin>>s;
map<char,int>m;
for(int j=0;j<s.size();j++)
{
m[s[j]]++;
if(s[j]=='P') p=j;
if(s[j]=='T') t=j;
}
if(m['P']==1&&m['A']!=0&&m['T']==1&&(p*(t-p-1)==s.length()-t-1)&&m.size()==3&&t-p!=1)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}