可以使用给定的String数组形成给定的String吗?

时间:2019-07-13 11:41:31

标签: java

我正在尝试编写最佳算法来解决该问题。可以使用给定的String数组形成给定的String吗?

我尝试了多种解决方案,但是执行时间超出了我的要求。

import java.util.ArrayList;
import java.util.Scanner;

public class JavaApplication5 {
static boolean encontrado;
static ArrayList<String> tp=new ArrayList<>();
static ArrayList<String> ts=new ArrayList<>();
public static void main(String[] args) {
    tp.add("H");
    tp.add("B");

    ts.add("HE");
    ts.add("LI");
    Scanner t=new Scanner(System.in);

    while(t.hasNext()){
        encontrado=false;
        String f=t.nextLine().replaceAll(" ","").toUpperCase();
        if(calcular(f,0)){
            System.out.println(YES");
        }else{
            System.out.println("NO");
        }
    }
}

private static boolean calcular(String f,int pos) {
    if(f.length()>pos&&!encontrado){
        if(tp.indexOf(String.valueOf(f.charAt(pos)))!=-1){
            if(pos==f.length()-1){
                encontrado=true;
            }else{
                calcular(f,pos+1);
            }
        }
    }
    if(f.length()>pos+1&&!encontrado){
        if(ts.indexOf(String.valueOf(f.charAt(pos))+String.valueOf(f.charAt(pos+1)))!=-1){
            if(pos+1==f.length()-1){
                encontrado=true;
            }else{
                calcular(f,pos+2);
            }
        }
    }
    return encontrado;
}

}

期望

 arrayString={"A","B","CD"}
 A.s="ACDBB"-->POSSIBLE
 B.s="DCAAB"-->NOT POSSIBLE

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

公共课程测试{

  static String[] arrayString = new String[] {"A","B","CD"};

  static boolean possible(String str) {
    if (str.length() == 0) {
      return true;
    }
    for (String component : arrayString) {
      if (str.startsWith(component)) {
        String shorterStr = str.substring(component.length());
        if (possible(shorterStr)) {
          return true;
        }
      }
    }
    return false;
  }

  static void test(String str) {
    String result = (possible(str) ? "" : "NOT ") + "POSSIBLE";
    System.out.println(str + " -> " + result);
  }

  public static void main(String[] args) {
    test("ACDBB");
    test("DCAAB");
  }
}