zoukankan      html  css  js  c++  java
  • 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+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

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

  • 相关阅读:
    GitLab基本用法
    SSH免密登录详解
    一文搞懂GitLab安装部署及服务配置
    初识:LevelDB
    Jenkins安装与Gitlab项目部署详解
    CentOS7的安装和配置
    C/C++语言的学习方向
    C语言atoi函数
    C语言整数的取值范围
    C语言scanf函数
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/11242023.html
Copyright © 2011-2022 走看看