360筆試算法題 AT變換

題目大體:順序排列DNA鏈,只有A和T,例如ATTTAA,如今科學家改變該鏈,改變時能夠單獨改變一個字母,也能夠把鏈裏的字母兩兩交換。
求:最短的交換次數
例如:ATTTAA --> TTAATT   最少須要3次交換,先把第一個A換成目標T,接着把第3個和第5個交換,第4個和第6個交換。3次搞定
spa


若是有更好的辦法,歡迎點評,不足之處請提醒。code

 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 }
相關文章
相關標籤/搜索