PAT 乙级 1003 我要通过

PAT 乙级 1003 我要通过

分析:

xPATx类都可以通过,x必须是空字符或者A,则AAPATAA等都可通过,PT中间一个A,左右等量A,0到多个

如果aPbTc正确,则aPbATca也正确,举几个例子可以发现,如果P左边A的数量是m,PT之间A的数量是n,P之后到结束A的数量为q,则有关系q = m * n;

所以需要记录P,A,T各自出现的数量,这种需要养成使用map的习惯,建立map<char, int> ,比较方便。

代码为

// PAT  乙级 1003.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main()
{
    int n, p = 0, t = 0;
    string s;
    cin >> n;
    for (int i = 0; i < n; i++) {
        map<char, int> map;
        cin >> s;
        for (int j = 0; j < s.length(); j++) {
            map[s[j]]++;
            if (s[j] == 'P') p = j;
            if (s[j] == 'T') t = j;
        }
        if (map['P'] == 1 && map['T'] == 1 && map['A'] != 0 && t - p != 1 && map.size() == 3 && p * (t - p - 1) == s.length() - t - 1) {
            cout << "YES\n";
        }
        else {
            cout << "NO\n";
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值