1. 程式人生 > 實用技巧 >PAT Basic1003 我要通過

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三個字串的長度用作最終判斷,遍歷一次即可。