LeetCode.1078-两词出现后的单词(Occurrences After Bigram)

这是小川的第392次更新,第422篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第254题(顺位题号是1078)。给出单词first和单词second,以"first second third"的形式在某些文本中出现,其中secondfirst之后立即出现,thirdsecond之后立即出现。

对于每个此类事件,将"third"添加到答案中,然后返回答案。

例如:

输入:text = "alice is a good girl she is a good student", first = "a", second = "good"
输出:["girl","student"]

输入:text = "we will we will rock you", first = "we", second = "will"
输出:["we","rock"]

注意

  • 1 <= text.length <= 1000

  • 文本由空格分隔的单词组成,每个单词由小写英文字母组成。

  • 1 <= first.length,second.length <= 10

  • first和second由小写英文字母组成。

02 第一种解法

题目很简单,要求找出在firstsecond出现后紧跟着的第三个单词,而整句话是由空格和单词组成的,直接利用空格切分整句话,变成单词数组,如果数组的当前元素等于first,且当前元素的下一个元素等于second,就将当前元素的下下个元素添加进ArrayList,最后将ArrayList转为String数组返回即可。

public String[] findOcurrences(String text, String first, String second) {
    List<String> result = new ArrayList<String>();
    String[] arr = text.split(" ");
    for (int i=0; i<arr.length-2; i++) {
        if (first.equals(arr[i]) && second.equals(arr[i+1])) {
            result.add(arr[i+2]);
        }
    }
    return result.toArray(new String[result.size()]);
}

03 第二种解法

如果不使用空格拆分,我们也可以采用遍历字符的方式来处理。

三个单词因为是相连的,所以我们使用前两个单词来找,只要能够找到前两个单词组成的子串,往后再找,直到遇到空格,那么就找到了第三个单词,将其截取出来存入ArrayList即可,处理完后,需要将索引往后移,从第二个单词的位置开始下一次寻找。

public String[] findOcurrences2(String text, String first, String second) {
    List<String> result = new ArrayList<String>();
    int m = first.length(), i = 0, len = text.length();
    while (i < len) {
        String tem = first + " " + second + " ";
        int index = text.indexOf(tem, i);
        if (index == -1) {
            break;  
        }
        int start = index+tem.length(), end = start;
        while (end < len && text.charAt(end) != ' ') {
            end++;
        }
        if (start < len) {
            result.add(text.substring(start, end));
        }
        i = index + m + 1;
    }
    return result.toArray(new String[result.size()]);
}

04 小结

算法专题目前已连续日更超过八个月,算法题文章260+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

posted @ 2019-07-25 08:38  程序员小川  阅读(493)  评论(0编辑  收藏  举报