C++ program to find unique anagrams in a list of words
时间: 2024-09-22 13:00:50 浏览: 59
在C++中,要找到列表中独特的同字母异序词(anagrams),你需要首先定义一个函数来检查两个字符串是否是彼此的变位词(anagram),然后遍历整个单词列表,使用哈希集合或者`std::unordered_set`来存储已经遇到过的anagram,并判断每个新遇到的单词是否与已存在的单词是anagram。下面是一个简单的示例程序:
```cpp
#include <iostream>
#include <vector>
#include <string>
#include <unordered_set>
// Function to check if two strings are anagrams
bool isAnagram(const std::string& s1, const std::string& s2) {
std::sort(s1.begin(), s1.end());
std::sort(s2.begin(), s2.end());
return s1 == s2;
}
// Function to find unique anagrams in a list
std::vector<std::string> findUniqueAnagrams(std::vector<std::string>& wordList) {
std::unordered_set<std::string> uniqueAnagrams;
for (const auto& word : wordList) {
// Skip empty strings and duplicates
if (word.empty() || uniqueAnagrams.find(word) != uniqueAnagrams.end()) continue;
// Check each word with others
for (auto it = wordList.begin(); it != wordList.end(); ++it) {
if (isAnagram(word, *it)) {
uniqueAnagrams.insert(*it);
}
}
}
return std::vector<std::string>(uniqueAnagrams.begin(), uniqueAnagrams.end());
}
int main() {
std::vector<std::string> words = {"listen", "silent", "triangle", "integral", "act", "cat"};
std::vector<std::string> uniqueAnagramSet = findUniqueAnagrams(words);
std::cout << "Unique anagrams found:\n";
for (const auto& anagram : uniqueAnagramSet) {
std::cout << anagram << "\n";
}
return 0;
}
```
在这个程序中,我们首先创建了一个哈希集合`uniqueAnagrams`来存储唯一的anagram。接着,在`findUniqueAnagrams`函数中,对每个单词,如果它是一个新的非空单词并且是其他某个单词的anagram,我们就将其添加到集合中。
阅读全文