#include #include #include #include #include #include std::size_t similar_words(std::vector &vec) { std::size_t count{}; std::unordered_map m{}; for(auto& str : vec) { std::set chars{}; str.erase(std::remove_if(str.begin(),str.end(), [&chars](char c){ if(chars.count(c)) return true; chars.insert(c); return false; }), str.end()); std::sort(str.begin(),str.end()); m[str]++; } for(const auto& [k,v] : m) count += (v * (v-1)) / 2; return count; } int main() { std::vector vec1{"aba","aabb","abcd","bac","aabc"}, vec2{"aabb","ab","ba"},vec3{"nba","cba","dba"}; std::cout << similar_words(vec1) << '\n'; std::cout << similar_words(vec2) << '\n'; std::cout << similar_words(vec3) << '\n'; return 0; }