中级农民
- 积分
- 109
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-5-5
- 最后登录
- 1970-1-1
|
后面没有下文了我就把第3题代码贴在这里吧,前两题地里答案太多了我就不贴了。题目我貌似截过图但是不记得扔到哪儿了。
- import java.util.*;
- /**
- * Created by jingjingy on 17/11/4.
- */
- public class GenericMutation {
- public static int findMutationDistance(String start, String end, String[] bank) {
- if (bank == null) {
- return -1;
- }
- if (!Arrays.asList(bank).contains(end)) {
- return -1;
- }
- if (start == end) {
- return 0;
- }
- int size = 0;
- HashSet<String> s1 = new HashSet<>();
- HashSet<String> s2 = new HashSet<>();
- s1.add(start);
- s2.add(end);
- return getMutation(s1, s2, bank, 0);
- }
- private static int getMutation (Set<String> s1, Set<String> s2, String[] bank, int step) {
- if (s1.isEmpty() || s2.isEmpty()) {
- return -1;
- }
- Set<String> s = new HashSet<>();
- Set<String> hash = new HashSet<>();
- char[] DNAstrand = {'A', 'C', 'G', 'T'};
- for (String word: s1) {
- char[] words = word.toCharArray();
- for (int i = 0; i <words.length; i++) {
- char replace = words[i];
- for (int j = 0; j < 4; j++) {
- words[i] = DNAstrand[j];
- String nextWord = String.valueOf(words);
- if (s2.contains(nextWord)) {
- return step + 1;
- } else if (!hash.contains(nextWord)){
- s.add(nextWord);
- hash.add(nextWord);
- }
- }
- words[i] = replace;
- }
- }
- if (s.size() > s2.size()) {
- return getMutation(s2, s, bank, ++step);
- } else {
- return getMutation(s, s2, bank, ++step);
- }
- }
- public static void main(String[] args) {
- String start = "AAAAAAAA";
- String end = "AAAAAATT";
- String[] bank = {"AAAAAAAA", "AAAAAAAT", "AAAAAATT", "AAAAATTT"};
- int step = findMutationDistance(start, end, bank);
- System.out.println(step);
- }
- }
复制代码 |
|