题目来源:http://www.patest.cn/contests/pat-b-practise/1003
思路:
P之前A的数目乘以P与T之间A的数目等于P后面A的数目。
对于第1个规则:0*0=0。
对于第2个规则:x*1=x。
对于第3个规则:aPbTc如果正确,那么b一定是A、a=c,bA就是AA,a*2=aa=ca。
import java.util.Scanner;
/**
* Created by chenhong on 15/10/14.
*/
public class Main {
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
//n次循环
for(int i=0;i<n;++i)
{
String str = scanner.next();
if(onlyPAT(str))
{
int beforeP = getNumber(str.subSequence(0, str.indexOf("P"))+""); //获得P之前A的个数
int betweenPAndT= getNumber(str.substring(str.indexOf("P"),str.indexOf("T"))); //P、T之间A的个数
int afterT = getNumber(str.substring(str.indexOf("T"))); //T之后A的个数
// P之前的A数目乘以P与T之间的A的数目等于P后面的A的数目
if(beforeP*betweenPAndT==afterT )
System.out.println("YES");
else
System.out.println("NO");
}
else
{
System.out.println("NO");
}
}
return ;
}
/**
* 获取字符串中A的个数
* @param str
* @return
*/
public static int getNumber(String str)
{
int count =0;
for(char c: str.toCharArray())
{
if(c=='A')
count++;
}
return count;
}
/**
* 以下情况会返回false:
* 1.含有非PAT的字符
* 2.P、T字符个数不为1
* 3.A个数下于1
* 4.P、T之间没有字符
*
* */
public static boolean onlyPAT(String str)
{
int counP=0,counT=0,counA=0,posP=0,posT=0;
for(int i = 0; i < str.length(); i++)
{
if(str.charAt(i) == 'P')
{
counP++;
posP = i;
}
else if(str.charAt(i) == 'T')
{
counT++;
posT = i;
}
else if(str.charAt(i) == 'A')
{
counA++;
}
else
return false;
}
if(counP!=1 && counT!=1)
{
return false;
}
else if(posT-posP < 2)
{
return false;
}
else if(counA<1)
{
return false;
}
else return true;
}
}
参考:http://www.faceye.net/search/98158.html