我正在尝试编写最佳算法来解决该问题。可以使用给定的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
答案 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");
}
}