题目来源于力扣(LeetCode)
一、题目
题目相关标签:哈希表
提示:
- 1 <= text.length <= 1000
- text 由一些用空格分隔的单词组成,每个单词都由小写英文字母组成
- 1 <= first.length, second.length <= 10
- first 和 second 由小写英文字母组成
二、解题思路
-
根据题目提示:text 由一些用空格分隔的单词组成,那么对 text 字符串进行字符的分隔,得到字符串数组
-
倒序遍历字符串数组,查找结果集
为什么要倒序?
因为结果集的查找,倒序查找比正序查找更容易
-
遍历过程中,如果当前遍历元素的前两个元素与 first 单词相同,前一个元素与 second 单词相同,则该元素加入结果集中
三、代码实现
public static String[] findOcurrences(String text, String first, String second) {
List<String> list = new ArrayList<>();
// 根据空格进行分隔,得到一个个的单词
String[] textArr = text.split(" ");
// 对单词数组进行倒序遍历
// 注意判断条件的限制,防止索引越界
for (int i = textArr.length - 1; i > 1; i--) {
// 对当前遍历元素判断其前一个元素是否 equals second
// 前二个元素是否 equals first
if (first.equals(textArr[i - 2]) && second.equals(textArr[i - 1])) {
// 满足条件则加入数组
list.add(textArr[i]);
// 一旦满足判断条件,则当前遍历元素的前一个一定不满足条件,i 可以减少一次遍历
i--;
}
}
// list 列表转 String 数组
return list.toArray(new String[list.size()]);
}
四、执行用时
五、部分测试用例
public static void main(String[] args) {
String text = "alice is a good girl she is a good student";
String first = "a";
String second = "good"; // output:{"girl", "student"}
// String text = "we will we will rock you";
// String first = "we";
// String second = "will"; // output:{"we", "rock"}
String[] result = findOcurrences(text, first, second);
System.out.println(Arrays.toString(result));
}