BOJ/IMplementation/グループ単語checker/Python

5989 ワード

<1316番>
コード1
import sys
input = sys.stdin.readline


n = int(input())
ans = n

for i in range(n):
    vocabs = input().rstrip()
    ch = []
    idx = 0

    while idx < len(vocabs) - 1:
        if vocabs[idx] != vocabs[idx+1]:
            if vocabs[idx] in ch:
                ans -= 1
                break
            else:
                ch.append(vocabs[idx])
        idx += 1
    if idx == len(vocabs) - 1 and vocabs[idx] in ch:
        ans -= 1

print(ans)
現在のインデックスのテキストとインデックス+1のテキストをwhile文で比較し、リストに個別に格納します.
この場合、リストに文字が既に存在するかどうかをチェックし、すでに存在する場合はグループ語ではありません.
インデックスはインデックス+1と比較されるため、最後の文字に対してインデックス+1がエラーになります.したがって、最後の文字はwhileのドアの外で個別にチェックされます.
ドアの中にちゃんと入れたかったけど、考えたら入れなかった.ちょっと直します.
効率的なコードで書こうと思っていたのですが、方法が分からないので100点だけ考えて解けました.
他のコードを探さなければなりません.
コード2
import sys
input = sys.stdin.readline

ans = 0

for i in range(int(input())):
    vocab = input().rstrip()
    if list(vocab) == sorted(vocab, key=vocab.find):
        ans += 1

print(ans)
  • 文字列.find(「文字」)
    文字列で最初に見つかった文字のインデックスを返します.
    つまり、文字列内で「文字」が複数回繰り返されても、最初の位置が返されます.
  • sorted(vocab, key = vocab.find)
    関数をkeyの引数として渡し、語彙内のすべての文字に適用します.