PAT-1003 我要通过 python实现

1.题目

 

本题要好好理解题目中的条件,条件理解错了答案自然就错了。首先统计三种字符的个数,然后找到P和A的下标,由此做分割统计前中后三部分的字符数,最后结合条件做出判断。

2.代码如下 

"""
输入:
10
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
XPXXXTAA
APT
APATTAA
输出:
YES
YES
YES
YES
NO
NO
NO
NO
NO
NO
"""
n = int(input())                    # 获取n个测试用例
for i in range(n):                  # 循环n次
    inp = input()                   # 每循环一次获取一个输入的字符串
    P_count = inp.count("P")        # 得到字符串中"P"字符的 个数
    A_count = inp.count("A")        # 得到字符串中"A"字符的 个数
    T_count = inp.count("T")        # 得到字符串中"T"字符的 个数

    P_index = inp.find("P")         # 获取字符串中"P"字符的 下标
    T_index = inp.find("T")         # 获取字符串中"T"字符的 下标
    # 找到前中后"A"的个数(因为是用下标计算的个数,所以不能断定就是字符"A",但可以先这样理解,后续再通过条件筛选出带有其他字符的错误答案)
    AP = P_index                    # "P"前面字符的个数
    midA = T_index - P_index - 1    # "P"和"T"中间字符的个数
    TA = len(inp) - T_index - 1     # "T"后面字符的个数
    # 1."P"、"A"、"T"的总个数如果等于字符串的长度,那么就相当于不包含其他字符
    # 2.P的个数为1,T的个数为1并且midA大于0,才能保证是形如 xPATx 的(至于要求"P"在"T"前面,下标相减得到midA>0时就已经涵盖在内了)
    # 3.由题,中间每增加一个"A",末尾就要增加一个a字符串,所以AP(a字符串)*midA(中间A的个数)=TA(A个a字符串)
    if P_count + A_count + T_count == len(inp) and P_count == 1 and T_count == 1 and midA > 0 and AP*midA == TA:
        print("YES")
    else:
        print("NO")

 3.提交结果

  • 22
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python实现FP-growth算法的示例代码: ```python class TreeNode: def __init__(self, name, count, parent): self.name = name self.count = count self.parent = parent self.children = {} self.next = None def increment(self, count): self.count += count def display(self, ind=1): print(' ' * ind, self.name, ' ', self.count) for child in self.children.values(): child.display(ind + 1) def create_tree(dataset, min_support): header_table = {} for trans in dataset: for item in trans: header_table[item] = header_table.get(item, 0) + dataset[trans] for k in list(header_table.keys()): if header_table[k] < min_support: del(header_table[k]) freq_item_set = set(header_table.keys()) if len(freq_item_set) == 0: return None, None for k in header_table: header_table[k] = [header_table[k], None] root = TreeNode('Null Set', 1, None) for trans, count in dataset.items(): local_d = {} for item in trans: if item in freq_item_set: local_d[item] = header_table[item][0] if len(local_d) > 0: ordered_items = [v[0] for v in sorted(local_d.items(), key=lambda p: p[1], reverse=True)] update_tree(ordered_items, root, header_table, count) return root, header_table def update_tree(items, in_tree, header_table, count): if items[0] in in_tree.children: in_tree.children[items[0]].increment(count) else: in_tree.children[items[0]] = TreeNode(items[0], count, in_tree) if header_table[items[0]][1] is None: header_table[items[0]][1] = in_tree.children[items[0]] else: update_header(header_table[items[0]][1], in_tree.children[items[0]]) if len(items) > 1: update_tree(items[1:], in_tree.children[items[0]], header_table, count) def update_header(node_to_test, target_node): while node_to_test.next is not None: node_to_test = node_to_test.next node_to_test.next = target_node def ascend_tree(leaf_node, prefix_path): if leaf_node.parent is not None: prefix_path.append(leaf_node.name) ascend_tree(leaf_node.parent, prefix_path) def find_prefix_path(base_pat, header_table): # first node in linked list tree_node = header_table[base_pat][1] cond_pats = {} while tree_node is not None: prefix_path = [] ascend_tree(tree_node, prefix_path) if len(prefix_path) > 1: cond_pats[tuple(prefix_path[1:])] = tree_node.count tree_node = tree_node.next return cond_pats def mine_tree(in_tree, header_table, min_support, pre_fix, freq_item_list): big_l = [v[0] for v in sorted(header_table.items(), key=lambda p: p[1][0])] for base_pat in big_l: new_freq_set = pre_fix.copy() new_freq_set.add(base_pat) freq_item_list.append(new_freq_set) cond_patt_bases = find_prefix_path(base_pat, header_table) my_cond_tree, my_head = create_tree(cond_patt_bases, min_support) if my_head is not None: mine_tree(my_cond_tree, my_head, min_support, new_freq_set, freq_item_list) def load_dataset(): return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]] def create_init_set(dataset): ret_dict = {} for trans in dataset: ret_dict[frozenset(trans)] = 1 return ret_dict if __name__ == '__main__': min_support = 2 dataset = load_dataset() init_set = create_init_set(dataset) fp_tree, header_table = create_tree(init_set, min_support) freq_items = [] mine_tree(fp_tree, header_table, min_support, set([]), freq_items) print(freq_items) ``` 这个示例代码实现了FP-growth算法的主要功能,包括创建FP树、查找条件模式基和挖掘频繁项集。在使用时,只需将数据集和最小支持度作为输入参数传递给函数即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值