PAT BASIC 1003 我要通过!
原题判断条件:
1.字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;
2.任意形如xPATx
的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3.如果aPbTc
是正确的,那么aPbATca
也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。
符合条件的字符串必须同时满足以上三个条件,题目的意思有点难懂,由2、3推导出必须满足lenC=lenB*lenA这个条件。具体推导说明有空再写。
判断函数源代码:
bool isRight(string X)
{
int lenA,lenB,lenC;
lenA = lenB = lenC = 0;
string::iterator it = X.begin();
int state = -1; //nothing find
while(it!=X.end())
{
if(!isValid(*it)) //判断是否为'P' 'A' 'T'三个字符
{
break;
}
if(*it == 'A')
{
if(state == -1)
lenA++;
else if(state == findP || state == findPA)
{
lenB++;
state = findPA;
}
else if(state == findPAT)
lenC++; //lenA+lenC
}
else if(*it == 'P')
{
if(state == -1)
state = findP;
else
break;
}
else if(*it == 'T')
{
if(state == findPA)
state = findPAT;
else
break;
}
else
break;
it++;
}
if(it != X.end() || state != findPAT || (lenC-lenA)!=lenA*(lenB-1))
return false;
else
return true;
}
主要思路就是计算出a、b、c三个字符串的长度用作最终判断,遍历一次即可。