PAT Basic1003 我要通过

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三个字符串的长度用作最终判断,遍历一次即可。

上一篇:2021-03-03


下一篇:大数乘法(A * B Problem Plus)问题