本文共 1085 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要找出所有可以被分解为恰好两个其他词组成的词,这些词被称为“帽子的词”。我们可以使用哈希表来快速判断一个子串是否存在,从而高效地解决这个问题。
#include#include #include #include using namespace std;int main() { unordered_map word_map; vector words; string word; while (cin >> word) { words.push_back(word); word_map[word] = true; } vector results; for (auto &w : words) { int len = w.length(); for (int i = 1; i < len; ++i) { string prefix = w.substr(0, i); string suffix = w.substr(i); if (word_map.find(prefix) != word_map.end() && word_map.find(suffix) != word_map.end()) { results.push_back(w); break; } } } sort(results.begin(), results.end()); for (auto &r : results) { cout << r << endl; } return 0;}
unordered_map存储所有词,vector存储所有读取的词。这个方法通过使用哈希表进行快速查找,确保了在合理的时间内解决问题,适用于输入规模较大的情况。
转载地址:http://aueaz.baihongyu.com/