题目链接:1.DNA序列修正 - 蓝桥云课 (lanqiao.cn)
利用HashMap的特性,将字母匹配转换成数字匹配
A + T = 0 + 1 = C + G = 1 + 2 = 3
另外,Java中没有交换(swap)函数,需要自己进行编写。
程序代码:
package lanqiao;import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;/*** 2023/11/29*/
public class lanqiao3904_DNA序列修正 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n=scan.nextInt();//DNA序列长度char[] a=new char[n];char[] b=new char[n];a=scan.next().toCharArray();//两条DNA序列b=scan.next().toCharArray();Map<Character,Integer> map=new HashMap<>();map.put('A',0);//可以保证,相匹配的字符加和恒为3map.put('C',1);//A——T 0+3=3map.put('G',2);//C——G 1+2=3map.put('T',3);int ans=0;for (int i=0;i<n;i++){if (map.get(a[i])+map.get(b[i])!=3){//相加不为3,则说明两个字符不匹配,需要向后寻找进行交换for (int j=i+1;j<n;j++){if (map.get(a[i])+map.get(b[j])==3||map.get(a[j])+map.get(b[i])==3){//两种相加和为3的可能swap(b,i,j);//如果i后面有匹配字符,则进行一次交换}}ans++;}}System.out.println("使DNA互补的最小操作次数为:"+ans);}public static void swap(char[] c,int x,int y){//将 c[x] 与 c[y] 进行交换char temp=c[x];c[x]=c[y];c[y]=temp;}
}
运行结果:
5
ACGTG
ACGTC
使DNA互补的最小操作次数为:2进程已结束,退出代码为 0