DNA序列修正 map键对匹配

你的任务是通过最小的操作次数,使第二条 DNA 序列和第一条 DNA 序列互补。并且已知初始两条 DNA 序列长度均为 N。

输入格式

第一行包含一个整数 N,(1≤N≤103),表示 DNA 序列的长度。

接下来的两行,每行包含一个长度为 N 的字符串,表示两条 DNA 序列。

输出格式

输出一个整数,表示让第二条 DNA 序列和第一条 DNA 序列互补所需的最小操作次数。

样例输入

5
ACGTG
ACGTC

样例输出

2
#include <bits/stdc++.h>
using namespace std;
int find(string &s1,string &s2,int i,char a,char b) {
    while (i < s1.size()) {
        if (s2[i] == a && s1[i] == b) return i;
        i++;
    }
    return -1;
}
int main() {
    int n,cnt = 0; cin >> n;
    string s1,s2; cin >> s1 >> s2;
    //通过使用这个映射表,你可以将一个DNA序列中的碱基替换为其互补碱基。例如,如果输入的DNA序列是 "ATCG",那么输出的互补序列将是 "TAGC"。
    map<char,char>mp = {{'A','T'},{'C','G'},{'T','A'},{'G','C'}};
    //将字符串s1中的每个字符替换为映射表mp中对应的字符
    for (int i = 0; i < n; i++) {
        s1[i] = mp[s1[i]];
    }
    //用于比较两个字符串s1和s2的每个字符。
    // 如果在某个位置上,s1和s2的字符不相等,它会尝试在s2中查找与s1[i]相等的字符,并将其与s2[i]交换。如果没有找到相等的字符,则将s1[i]赋值给s2[i]。
    for (int i = 0; i < n; i++) {
        if (s1[i] != s2[i]) {
            int x = find(s1,s2,i,s1[i],s2[i]);//i是开始查找的位置。
            if (x != -1) swap(s2[i],s2[x]);
            else s2[i] = s1[i];
            cnt++;
        }
    }
    cout << cnt << '
';
    return 0;
}