码迷,mamicode.com
首页 > 编程语言 > 详细

360笔试算法题 AT变换

时间:2020-03-24 23:37:36      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:pac   题目   --   line   lin   +=   查找   笔试   dna   

题目大致:顺序排列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] != s1_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 }

 

360笔试算法题 AT变换

标签:pac   题目   --   line   lin   +=   查找   笔试   dna   

原文地址:https://www.cnblogs.com/motorye/p/12562582.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!