Нужно проверить, может ли список строк образовывать определенное слово, где мы можем использовать элементы в списке, которые можно использовать только один раз или которые мы не используем

#java #string #recursion #data-structures

Вопрос:

Ввод

слово = фобарбаз

Содержание списка строк foob foo ba ba r z

Выход

истинный


ТЕСТОВЫЙ ПРИМЕР 2 Входное слово = foobarbaz

Содержание списка строк foo fooz ba r z

Выход

ложный


Мы можем предположить, что len(слово) >=1 и размер(содержимое списка строк) >>= 1

 import java.util.ArrayList;

public class TilePossibilties {

public static void main(String[] args) {
    String word = "foobarbaz";

    ArrayList<String> arrayList = new ArrayList<>();

    arrayList.add("foob");
    arrayList.add("foo");
    arrayList.add("ba");
    arrayList.add("r");
    arrayList.add("z");

    System.out.println(check(word, arrayList));

}

private static boolean check(String word,ArrayList<String> arrayList) {

    return isOkay(arrayList, word, "");
}

private static boolean isOkay(ArrayList<String> arrayList, String word, String candidate) {

    for(int i = 0; i < arrayList.size(); i  ){
        String test = candidate   arrayList.get(i);

        if(test.equals(word)) {
            return true;
        }

        if(word.startsWith(test)) {
            boolean tempResult = isOkay(arrayList, word, test);
            if(tempResult) {
                return true;
            }
        }

        test = candidate;
    }

    return false;
}
}
 

Комментарии:

1. В чем заключается ваш вопрос? Какая часть не работает?

Ответ №1:

Мы не фабрика домашних заданий. Однако я отмечу, что это проблема, о которой легче думать как о рекурсии. В псевдокоде:

 match(word, set):
  for each s in set:
    if word == s 
      or word starts with s and match(word with s prefix removed, set - s):
        return true;
  return false;