360笔试算法题 AT变换

Posted motorye

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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] != 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变换的主要内容,如果未能解决你的问题,请参考以下文章

360笔试编程题

2016奇虎360研发工程师内推笔试编程题:找镇长

数据挖掘2020奇安信秋招算法方向试卷3 笔试题解析

360笔试(3-18)编程题

大疆面试笔试一部分总结

百度算法题笔试——手撕代码总结