1078. Bigram 分词『简单』

题目来源于力扣(LeetCode

一、题目

1078. Bigram 分词

题目相关标签:哈希表

提示:

  • 1 <= text.length <= 1000
  • text 由一些用空格分隔的单词组成,每个单词都由小写英文字母组成
  • 1 <= first.length, second.length <= 10
  • first 和 second 由小写英文字母组成

二、解题思路

  1. 根据题目提示:text 由一些用空格分隔的单词组成,那么对 text 字符串进行字符的分隔,得到字符串数组

  2. 倒序遍历字符串数组,查找结果集

    为什么要倒序?

    因为结果集的查找,倒序查找比正序查找更容易

  3. 遍历过程中,如果当前遍历元素的前两个元素与 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));
}
posted @ 2020-05-14 21:52  知音12138  阅读(361)  评论(0编辑  收藏  举报