1078. Bigram 分词『简单』

Posted zhiyin1209

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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));
}

以上是关于1078. Bigram 分词『简单』的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1078 Bigram分词[字符串匹配] HERODING的LeetCode之路

LeetCode 1609. 奇偶树 / 1078. Bigram 分词 / 825. 适龄的朋友(计数排序)

LeetCode 1609. 奇偶树 / 1078. Bigram 分词 / 825. 适龄的朋友(计数排序)

Python --- 1078. Occurrences After Bigram 解题报告

Python --- 1078. Occurrences After Bigram 解题报告

LeetCode -- 1078. Occurrences After Bigram