Имея слова first и second, рассмотрите вхождения в некоторые text формы 'first second third', где second стоит сразу после first, а third сразу после second.

Для каждого такого случая добавьте к ответу «third» и верните ответ.

Пример 1:

Input: text = "alice is a good girl she is a good student", first = "a", second = "good"
Output: ["girl","student"]

Пример 2:

Input: text = "we will we will rock you", first = "we", second = "will"
Output: ["we","rock"]

Примечание.

  1. 1 <= text.length <= 1000
  2. text состоит из слов, разделенных пробелами, где каждое слово состоит из строчных букв латинского алфавита.
  3. 1 <= first.length, second.length <= 10
  4. first и second состоят из строчных английских букв.

Решение:

Исходя из условия задачи, очевидно, что нам нужно последовательно искать три слова. Мы можем сделать сканирование окна по тексту.

  1. Если вы нашли три слова в окне, в последнем слове в StringBuilder.
  2. добавьте дополнительную запятую после этого, чтобы позже получить ожидаемые результаты
  3. когда вы закончите или закончите текст, удалите последнюю запятую
  4. Получите массив слов из StringBuilder и верните его.

Вот мое решение для Java ниже:

public String[] findOcurrences(String text, String first, String second) {
    String[] arr = text.split(" ");
    int len = arr.length;
    int pos = 0;
    StringBuilder sb = new StringBuilder();
    while (pos < len) {
        if (pos+1<len && arr[pos].equalsIgnoreCase(first) && arr[pos + 1].equalsIgnoreCase(second)) {
            if (pos + 2 < len) {
                sb.append(arr[pos + 2]);
                sb.append(",");
            }
        }
        pos++;
    }
    // System.out.println(sb.toString());
    String[] result = new String[0];
    if(sb.toString().length()>1)
        result = sb.toString().substring(0, sb.toString().length() - 1).split(",");
    return result;
}

Примечание: Вы можете найти полную реализацию кода здесь.