给一个list的string,然后让找第一个重复的string。
第一小问定义第一个重复是根据重复的第二个单词的顺序,
第二小问定义第一个重复是根据重复的第一个单词的顺序。
1. “java python python java" 返回python因为走到python是先出现了duplicate
2. “java python python java" 返回java因为在有duplicate的单词中,java第一次出现的最早
链接: https://instant.1point3acres.com/thread/193724
来源: 一亩三分地
1.从左到右进hashmap,如果有重复break,输出。
2.从右到左进hashmap,如果有重复存下来,最后输出。
#include <iostream>
#include <queue>
#include <vector>
#include <stack>
#include <string>
#include <unordered_map>
#include <unordered_set>
using namespace std;
string findDuplicateWords1(vector<string> words) {
unordered_set<string> appeared;
for (int i = 0; i < words.size(); i++) {
if (appeared.count(words[i])) return words[i];
appeared.insert(words[i]);
}
return "";
}
string findDuplicateWords2(vector<string> words) {
unordered_set<string> appeared;
string res;
for (int i = words.size() - 1; i >= 0; i--) {
if (appeared.count(words[i])) res = words[i];
appeared.insert(words[i]);
}
return res;
}
int main(int argc, char *argv[]) {
vector<string> words = {"java", "python", "python", "java"};
cout<<findDuplicateWords1(words)<<endl;
cout<<findDuplicateWords2(words)<<endl;
return 0;
}