我被问到以下面试问题:
如果有两个字符串输入,那么可以使用什么方法来打印字符串输入所共有的字母。例如,如果用户输入:
工作中 浸透
产出:
好的
解决这个问题的最佳算法是什么?
发布于 2014-10-24 04:34:45
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));实际上,如果在交集上不需要进一步处理,可以直接将其发送到cout。
set_intersection(setA.begin(), setA.end(), setB.begin(), setB.end(),
ostream_iterator<char>(cout));发布于 2014-10-24 04:44:49
你的描述不是明确的,但我读它的方式,你想知道什么字母是相同的,包括位置。
#include <string>
#include <iostream>
#include <algorithm>
int main() {
std::string const a = "working";
std::string const b = "soaked";
for (int i = 0; i < std::min(a.size(), b.size()); ++i) {
if (a[i] == b[i]) {
std::cout << a[i];
}
}
}生产:
ok发布于 2014-10-24 04:44:24
假设是英文字母。
首先,我使用26的布尔数组大小。
bool array[26];然后,对索引(letter-'a') (for upper letter-'A')上的每一个字母都要这样做。
然后,对于第二个字符串,执行同样的操作,但这一次是为array[index]==true加油。如果是,则添加到共同列表中;
下面是小的测试代码:
bool array[26];
for(bool &arr:array )arr=false;
char text1[]="working";
char text2[]="soaked";
char common[80]="";
for(char x:text1){
int m=x-'a' ;
if(m>=0 && m<26){
array[m] =true;
}
}
int j=0;
for(char x:text2){
int m=x-'a' ;
if(m>=0 && m<26){
if(array[m] ==true){
common[j]=x;
++j;
array[m]=false; //do not check again
}
}
}
common[j]='\0';
printf("%s\n",common);https://stackoverflow.com/questions/26541491
复制相似问题