zoukankan      html  css  js  c++  java
  • 360笔试算法题 AT变换

    题目大致:顺序排列DNA链,只有A和T,例如ATTTAA,现在科学家改变该链,改变时可以单独改变一个字母,也可以把链里的字母两两交换。
    求:最短的交换次数
    例如:ATTTAA --> TTAATT   最少需要3次交换,先把第一个A换成目标T,接着把第3个和第5个交换,第4个和第6个交换。3次搞定


    如果有更好的办法,欢迎点评,不足之处请提醒。

     1 package com.motorye;
     2 
     3 public class T360 {
     4     public static void main(String[] args) {
     5         /*Scanner scanner1 = new Scanner(System.in);
     6         String s1 = scanner1.nextLine();
     7         Scanner scanner2 = new Scanner(System.in);
     8         String s2 = scanner2.nextLine();*/
     9         String s1 = "ATTTAA";
    10         String s2 = "TTAATT";
    11         int totalTimes = 0;
    12 
    13         char[] s1_chars = s1.toCharArray();
    14         char[] s2_chars = s2.toCharArray();
    15 
    16         int s1_A = 0;
    17         int s2_A = 0;
    18 
    19         //这里取A的次数
    20         for(int i = 0; i<s1_chars.length; i++){
    21             if(s1_chars[i] == 'A'){
    22                 s1_A++;
    23             }
    24             if(s2_chars[i] == 'A'){
    25                 s2_A++;
    26             }
    27         }
    28 
    29          //两种极端,全等或全不等
    30         if(s1_A - s2_A == 0 || s1_A - s2_A == s1_chars.length){
    31             totalTimes += Math.abs(s1_A - s2_A);
    32         }else if(s1_A - s2_A != 0) {
    33             //这里写的else if 加条件,便于理解
    34             //二者A数目不一样时候,必须替换差值次。
    35             totalTimes += Math.abs(s1_A - s2_A);
    36             //换成数目一样的以后,再两两替换
    37             int k = 0;
    38             int j = 0;
    39             int i = k;
    40             while(true){
    41 
    42                 if(k == s1_chars.length){
    43                     break;
    44                 }
    45                 if(j == s2_chars.length){
    46                     break;
    47                 }
    48                 if(s1_chars[k] == s2_chars[j]){
    49                     k++;
    50                     i = k;
    51                     j++;
    52                 }else {
    53                     //不相等,那就往后查找,直到相等的
    54                     while (s1_chars[i] != s2_chars[j]){
    55                         if(i == s1_chars.length){
    56                             break;
    57                         }
    58                         i++;
    59                     }
    60                     totalTimes+=1;
    61                     k++;
    62                 }
    63             }
    64         }
    65         System.out.println(totalTimes);
    66     }
    67 }
  • 相关阅读:
    软件构造 第三章第一节 数据类型与类型检查
    类图总结
    【Beta】Scrum07
    【Beta】用户问题反馈及处理(一直更新)
    【Beta】第七次任务发布
    【Beta】Scrum06
    【Beta】第六次任务发布
    【Beta】Scrum5.5
    【Beta】第5.5次任务发布
    【Beta】Scrum05
  • 原文地址:https://www.cnblogs.com/motorye/p/12562582.html
Copyright © 2011-2022 走看看