题目描述:
解题思路:
-
从左到右扫描第一条 DNA 序列和第二条 DNA 序列的每一个位置,检查它们是否互补。
-
如果某个位置不互补,我们需要寻找第二条 DNA 序列中后续位置的碱基,看是否可以通过交换使这两个位置都互补。如果可以,我们就进行交换。
-
如果在后续位置找不到可以交换的碱基,说明这个位置只能通过替换来满足要求。因为每个位置只能修改一次,所以我们不能把不配对的碱基交换到当前位置作为中转站,则只能进行修改。
-
每次交换或替换,操作计数器增加 1。
-
最后输出操作计数器的值。
题解 :
#include<bits/stdc++.h>
using namespace std;
map<char, int> pp = {{'A', 0}, {'C', 1}, {'G',2}, {'T',3}};//pp['A'] = 0
int main()
{
int n; cin >> n;
string a,b;
cin >> a >> b;
int cnt = 0;
for(int i = 0; i < n; i++)
{
if(pp[a[i]] + pp[b[i]] != 3)//不等于3不互补
{
for(int j = i+1; j < n; j++)
{
if(pp[a[i]] + pp[b[j]] ==3 && pp[a[j]] + pp[b[i]] == 3)//是pp[a[i]]不是pp[i]
{
swap(b[j], b[i]);//交换b互补两个位置
break;
}
}
cnt++;
}
}
cout << cnt;
return 0;
}