[python]白駿1316号:組合せ語チェック


https://www.acmicpc.net/problem/1316

質問する


コンビネーションワードとは、単語に存在するすべての文字に対して、各文字が連続して現れる場合にのみ使用されます.例えば、ccazzzbbは、c、a、z、bが連続して現れるため、kinもk、i、nが連続して現れるが、aabbbbcbはbが落ちたため、組合せ語ではない.
プログラムを作成し、N個の単語を入力し、グループ内の単語数を出力してください.

入力


1行目の単語の個数はNです.Nは100以下の自然数である.2行目から、単語はN行に入ります.単語はアルファベット小文字だけで、繰り返しず、最長100です.

しゅつりょく


最初の行はグループ語の個数を出力します.

に答える


アイデア

  • 文字が不連続な場所で再び現れると、その文字列は組合せ語ではなく
  • である.
  • これらのみを考慮して、コード
  • を記述する
    count = 0
    
    for i in range(int(input())):
        word = input()
        for j in word:
            if j in word[word.index(j)+2:]:
                count -= 1
                break
        count += 1
    
    print(count)
    文字が非連続文字列にある場合は、breakです.count -= 1をする理由はbreakを運転してもドアが一番外側なので無条件にcount += 1を運転します.だから1...とても非効率な感じがします...
    与えられた
  • の例では、返された結果はすべて正しいが、答えが間違っているのは
  • である.
    もし文字列が
  • だったら?上記のコードにaaabが連続する出現してもaと比較するのでif文
  • を実行する.
  • ですので、この間も同じ文字ではない条件
  • が追加されました.
    count = 0
    
    for i in range(int(input())):
        word = input()
        for j in word:
            if j in word[word.index(j)+2:]:
                # 추가!!!
                if word[word.index(j)+1] != j:
                    count -= 1
                    break
        count += 1
    
    print(count)
  • でも
  • と間違えました
  • 現在の問題はabです
  • 連続文字が異なる場合、現在の文字の後に文字列
  • を再定義する.
  • 新しい文字列に現在の文字がある場合、その文字列はグループ文字ではなく
  • である.

    コード#コード#

    n = int(input())
    count = 0
    
    for i in range(n):
        word = input()
        for j in range(len(word)-1):
            if word[j] != word[j+1]:
                new = word[j+1:]
                if word[j] in new:
                    count -= 1
                    break
        count += 1
    
    print(count)

    ああ...
    私は30分以上かけてこの問題を解いた.練習を続ければできるでしょう.がんばって…!