你的任务是通过最小的操作次数,使第二条 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; }