“算法分析与设计”作业第四题。
要注意的点挺多,特别是匹配过的要去掉不能再次检索。
#include <iostream>
#include <cstring>
#include <map>
using namespace std;
bool match(string a, string b, map<char, char> dic) {
if(a.length() != b.length()) {
return false;
}
for(int i = 0; i < a.length(); i++) {
if(dic[a[i]] != b[i]) {
return false;
}
}
return true;
}
int main() {
map<char, char> pair;
pair['A'] = 'T', pair['T'] = 'A', pair['G'] = 'C', pair['C'] = 'G';
int tests;
cin >> tests;
while(tests--) {
int n;
cin >> n;
string DNA[101];
for(int i = 0; i < n; i++) {
cin >> DNA[i];
}
int count = 0;
for(int i = 0; i < n; i++) {
if(DNA[i] != "") {
for(int j = i+1; j < n; j++) {
if(DNA[j] != "" && match(DNA[i], DNA[j], pair)) {
DNA[j] = "";
count++;
break;
}
}
}
}
cout << count << endl;
}
}