【问题标题】:Morgan and a String HackerRank摩根和一个字符串 HackerRank
【发布时间】:2016-02-28 21:56:00
【问题描述】:

我正在尝试hackerrank 中的摩根和弦乐挑战 (https://www.hackerrank.com/challenges/morgan-and-a-string/)

我的尝试如下:

public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner in = new Scanner(System.in);
        int testCases = in.nextInt();
        for(int i=0; i<testCases; i++){
            StringBuilder a = new StringBuilder(in.next());
            StringBuilder b = new StringBuilder(in.next());
            StringBuilder result = new StringBuilder();
            int indexA = 0;
            int indexB = 0;
            while(indexA < a.length() && indexB < b.length()){
                if(a.charAt(indexA)<=b.charAt(indexB)){
                    result.append(a.charAt(indexA));
                    indexA++;
                }
                else{
                    result.append(b.charAt(indexB));
                    indexB++;
                }
            }
            if(indexA==a.length()){
                result.append(b.substring(indexB,b.length()));
            }
            else{
                result.append(a.substring(indexA,a.length()));
            }
            System.out.println(result.toString());
        }

    }

我正确理解了前两种情况:

2 杰克 丹尼尔 ABACABA ABACABA

输出:

达杰克尼尔 AABABACABACABA

我不太确定我是否没有正确理解问题,或者我的输入用例过多,我看不到其他测试用例,但希望你们看看代码。

欢迎任何帮助。

谢谢!

【问题讨论】:

    标签: java string concatenation


    【解决方案1】:

    我认为,当您在两个堆栈顶部都有相同的字母时会出现问题:您不能任意选择(您总是选择第一个或 a 堆栈),但必须比较两个堆栈上的下一个字母(如果它们也相等,那么后面的那些等等),这样您就可以确保最佳延续......

    例如

    input: bbb bba
    
    your output: bbbbba
    correct output: bbabbb
    

    【讨论】:

    • 哦!您的陈述似乎是正确的,并且示例非常清楚,我将尝试解决该问题。不过看起来并不容易。
    • 如果它们很容易,解决它们就没有乐趣了;)
    【解决方案2】:
        import java.util.ArrayDeque;
        import java.util.ArrayList;
        import java.util.Scanner;
        import java.util.Stack;
        public class MorganStack2 {
        static String morganAndString(String a, String b) {
    
    
        char[] a1 = a.toCharArray();
        char[] b1 = b.toCharArray();
    
    
        ArrayList<Character> s1 = new ArrayList<>();
    
        ArrayDeque<Character> jackStack = new ArrayDeque<>();
        ArrayDeque<Character> danielStack = new ArrayDeque<>();
    
    
        for (int i = a1.length - 1; i >= 0; i--) {
            jackStack.push(a1[i]);
    
        }
    
        for (int i = b1.length - 1; i >= 0; i--) {
            danielStack.push(b1[i]);
        }
    
    
        int min = Math.min(a1.length, b1.length);
        int max = Math.max(a1.length, b1.length);
    
        int jack = 0;
        int daniel = 0;
    
        int c = 0;
        while (!(jackStack.isEmpty() || danielStack.isEmpty())) {
            if (jackStack.peek() < danielStack.peek()) {
                s1.add(jackStack.pop());
                jack++;
            } else if (jackStack.peek() > danielStack.peek()) {
                s1.add(danielStack.pop());
                daniel++;
    
            } else {
                    if (a.substring(jack).compareTo(b.substring(daniel))>0){
                        s1.add(danielStack.pop());
                        daniel++;
                    }else if (a.substring(jack).compareTo(b.substring(daniel))<0) 
                      {
                        s1.add(jackStack.pop());
                        jack++;
                    }else{
                        if(a.compareTo(b)>=0){
                            s1.add(danielStack.pop());
                            daniel++;
    
                        }else  if(a.compareTo(b)<0){
                            s1.add(jackStack.pop());
                            jack++;
    
                        }else{
                            System.out.println("hyy");
                        }
                    }
    
    
                }
                c++;
            }
          }
            // System.out.println(c);         AAAAAAAAAA
            //System.out.println(max);
            // System.out.println(min);
            if (jackStack.isEmpty()) {
                while (!danielStack.isEmpty()) {
                    s1.add(danielStack.pop());
                }
            } else {
                while (!jackStack.isEmpty()) {
                    s1.add(jackStack.pop());
                }
            }
    
    
            StringBuilder sb = new StringBuilder();
    
            for (Character s : s1) {
                sb.append(s);
    
            }
    
    
            return sb.toString();
        }
    
    
    
        private static final Scanner scanner = new Scanner(System.in);
    
        public static void main(String[] args)  {
    
        int t = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
    
        for (int tItr = 0; tItr < t; tItr++) {
            String a = scanner.nextLine();
    
            String b = scanner.nextLine();
    
            String result = morganAndString(a, b);
            System.out.println(result);
    
    
           }
    
    
    
           scanner.close();
          }
    
    
      }
    

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 2019-06-12
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 2022-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多