PAT Basic1003 我要通過
阿新 • • 發佈:2020-08-07
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三個字串的長度用作最終判斷,遍歷一次即可。