Имея слова 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 <= text.length <= 1000
text
состоит из слов, разделенных пробелами, где каждое слово состоит из строчных букв латинского алфавита.1 <= first.length, second.length <= 10
first
иsecond
состоят из строчных английских букв.
Решение:
Исходя из условия задачи, очевидно, что нам нужно последовательно искать три слова. Мы можем сделать сканирование окна по тексту.
- Если вы нашли три слова в окне, в последнем слове в StringBuilder.
- добавьте дополнительную запятую после этого, чтобы позже получить ожидаемые результаты
- когда вы закончите или закончите текст, удалите последнюю запятую
- Получите массив слов из 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; }
Примечание: Вы можете найти полную реализацию кода здесь.