【題解】ZeroJudge e608: 00630 – Anagrams (II)

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=e608
【解題想法】

  • 符合變位字(易位構詞, anagram): 每個字母出現的次數相同。
  • 本題所有單詞均為「小寫」。
  • s[i]: 詞彙中的第 i 個單詞。
  • a[i][26]:第 i 個單詞中,每個字母出現的次數。
#include <iostream>
#include <cstring>
using namespace std;
int a[1000][26];
string s[1000];

int main() {
    int T, N;
    cin >> T;
    while (T--){
        cin >> N;
        memset(a, 0, sizeof(a));
        for (int i = 0; i < N; i++){
            cin >> s[i];
            for (int j = 0; j < s[i].size(); j++){
                a[i][s[i][j] - 'a']++;
            }
        }
        string S;
        while (cin >> S){
            if (S == "END") break;
            int A[26] = {0};
            for (int j = 0; j < S.size(); j++){
                A[S[j] - 'a']++;
            }
            int i, j, cnt = 0;
            cout << "Anagrams for: " << S << "\n";
            for (i = 0; i < N; i++){
                for (j = 0; j < 26; j++){
                    if (A[j] != a[i][j]) break;
                }
                if (j == 26) {
                    cout << "  " << ++cnt << ") " << s[i] << "\n";
                }
            }
            if (cnt == 0) cout << "No anagrams for: " << S << "\n";
        }
    }
    return 0;
}
分享本文 Share with friends