鼠鼠的算法题解

import java.util.Scanner;

public class DNA {
    public static boolean match(char x, char y) {
        return x == 'A' && y == 'T' || x == 'T' && y == 'A' || x == 'C' && y == 'G' || x == 'G' && y == 'C';
    }

    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        char[] a1 = new char[n];
        char[] a2 = new char[n];

        String str = s.next();
        a1 = str.toCharArray();

        String str1 = s.next();
        a2 = str1.toCharArray();

        char x;
        int count = 0;
        for (int j = 0; j < n; j++) {
            if (!match(a1[j], a2[j])) {
                int flag = 1;
                for (int i = j; i < n; i++) {

                    if (match(a1[i], a2[j]) && match(a2[i], a1[j])) {
                        x = a2[j];
                        a2[j] = a2[i];
                        a2[i] = x;
                        flag = 0;
                        count++;
                        break;
                    }  //若满足交换后能同时配对两对碱基对,那么交换,否则不交换//
                }

                if (flag == 1) {
                    count++;
                }
            }
        }

        System.out.println(count);
    }
}

这道题目大概花了我一个小时,一开始想思路可能就十几分钟吧。这道题目考察的算法知识主要是模拟,一开始看起来挺难,但尝试之后发现思路还是比较清晰的,主要的问题还是在于思路实现上的一些小细节。

1.输入数据是连续的字符(非字符串)例如ACGTA,这时候就不好使用s.next().charAt(0)了。s.next()方法以空格符号为结束,连续的字符是无法直接读取的。先用s.next()方法读取字符串,再用.toCharArray()方法将其转化为字符数组。

2.判断碱基对交换的代码段中,一旦完成交换,应该立即break跳出循环。很多算法题中我都会犯类似的错误。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值