白駿-1316組単語checker


コード#コード#


C++
#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    string str;
    int answer = 0;
    
    cin >> n;
    for(int i=0;i<n;i++) {
        cin >> str;
        int alpha[27] = {0,};
        int len = str.length();
        bool check = true;
        for(int j=0;j<len;j++) {
            if(j == len-1) {
                if(str[j] != str[j-1])
                {
                    alpha[str[j]-'a']++;
                }
            } else {
                if(str[j] != str[j+1]) {
                    alpha[str[j]-'a']++;
                    if(alpha[str[j+1]-'a'] == 1) {
                        check = false;
                        break;
                    }
                }
            }
            if(alpha[str[j]-'a'] > 1) {
                check = false;
                break;
            }
        }
        if(check) {
            answer++;
        }
    }
    cout << answer;
}
Python
n = int(input())
for _ in range(n):
    word = input()
    for i in range(len(word)-1):
        if word[i] != word[i+1]:
            if word[i] in word[i+1:]:
                n -= 1
                break

print(n)

解答と感想


これはグループチャットを見ているときに聞かれた質問で、素早く解くためにc++で答えます.単語を比較するときは、以前に出てきたらbreakで解決します.aabaaの反例が見つからなかったので、時間がかかりました.pythonコードは最近一緒に勉強した兄が解決する方法で、他の単語が現れたら、次の単語からカットして、その中に存在するかどうかを知る方法で解決します.結構時間がかかると思いますが、初めてドアから最大になるとアルファベット数が27回くらいなので速度的には問題ないと思います.