Loading Now

[STLC++Set]aramic

STLC++_SET

Bài tập.

Trong ngôn ngữ Aramic từ có thể đại diện cho các đối tượng.

Các từ trong Aramic có tính chất đặc biệt:

  • Một từ là một gốc nếu nó không chứa cùng một chữ cái nhiều lần.
  • Một gốc và tất cả các hoán vị của nó cũng chỉ đại diện cho cùng một đối tượng.
  • Từ gốc x của một từ y là từ chứa tất cả các chữ cái xuất hiện trong y theo cách mà mỗi chữ cái xuất hiện một lần. Ví dụ: gốc của "aaaa", "aa", "aaa""a", gốc của "aabb", "bab", "baabb", "ab""ab".
  • Bất kỳ từ nào trong Aramic đại diện cho cùng một đối tượng với gốc của nó.

Bạn có một dãy từ Aramic. Hãy đưa ra số lượng đối tượng khác nhau trong dãy đó.

Ví dụ:

  • Với words = ["a","aa","aaa","ab","abb"] thì kết quả là: aramic(words) = 2.

Hướng dẫn.

Tạo một set<string> để lưu các gốc. Với mỗi chuỗi để tìm gốc của nó có thể dùng set<char>.

Code mẫu:

int aramic(std::vector<std::string> words)
{
    set<string> s;
    
    for(int i=0; i<words.size(); i++){
        string str = words[i];
        set<char> ch;
        for(int j=0; j<str.length(); j++){
            ch.insert(str[j]);
        }
        string e="";
        for(auto x:ch) e+=x;
        s.insert(e);
    }
    return s.size();
}

Post Comment

Contact