给一个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 "";//return something if no duplicate words?
}

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;
}

results matching ""

    No results matching ""