C++排序文本

Keh*_*ain 4 c++ algorithm

我被问到以下面试问题:

如果有两个字符串输入,可以使用哪种方法来打印字符串输入具有共同点.例如,如果用户输入:

工作的

浸泡

输出:

解决问题的最佳算法是什么?

Igo*_*nik 12

string a = "working";
string b = "soaked";
set<char> setA(a.begin(), a.end());
set<char> setB(b.begin(), b.end());

vector<char> common;
set_intersection(setA.begin(), setA.end(), setB.begin(), setB.end(),
                 back_inserter(common));

copy(common.begin(), common.end(), ostream_iterator<char>(cout));
Run Code Online (Sandbox Code Playgroud)

事实上,如果交叉路口不需要进一步处理,可以直接发送到cout:

set_intersection(setA.begin(), setA.end(), setB.begin(), setB.end(),
                 ostream_iterator<char>(cout));
Run Code Online (Sandbox Code Playgroud)

  • 如果这给出了你想要的答案,我会避免使用`set`s并对字符串进行排序:http://coliru.stacked-crooked.com/a/d9fbfa41f3cd8e42.原因是所有基于节点的容器都非常昂贵,而且你几乎从不需要它们提供的功能而只是排序`array` /`vector` /`string`. (3认同)