这是小川的第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+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

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

LeetCode.1078-两词出现后的单词(Occurrences After Bigram)的更多相关文章

  1. C#LeetCode刷题之#58-最后一个单词的长度(Length of Last Word)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3927 访问. 给定一个仅包含大小写字母和空格 ' ' 的字符串, ...

  2. [LeetCode] Anagrams 错位词

    Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be ...

  3. LeetCode 445——两数相加 II

    1. 题目 2. 解答 2.1 方法一 在 LeetCode 206--反转链表 和 LeetCode 2--两数相加 的基础上,先对两个链表进行反转,然后求出和后再进行反转即可. /** * Def ...

  4. map集合修改其中元素 去除Map集合中所有具有相同值的元素 Properties长久保存的流操作 两种用map记录单词或字母个数的方法

    package com.swift.lianxi; import java.util.HashMap; import java.util.Iterator; import java.util.Map; ...

  5. [LeetCode] 245. Shortest Word Distance III 最短单词距离 III

    This is a follow up of Shortest Word Distance. The only difference is now word1 could be the same as ...

  6. [LeetCode] 288.Unique Word Abbreviation 独特的单词缩写

    An abbreviation of a word follows the form <first letter><number><last letter>. Be ...

  7. LeetCode:两数之和、三数之和、四数之和

    LeetCode:两数之和.三数之和.四数之和 多数之和问题,利用哈希集合减少时间复杂度以及多指针收缩窗口的巧妙解法 No.1 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在 ...

  8. lintcode-422-最后一个单词的长度

    422-最后一个单词的长度 给定一个字符串, 包含大小写字母.空格' ',请返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 注意事项 一个单词的界定是,由字母组成,但不包含任何的空 ...

  9. Leetcode 002. 两数相加

    1.题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表 ...

随机推荐

  1. Web UI开发推荐!Kendo UI for jQuery自定义小部件——使用MVVM

    Kendo UI for jQuery最新试用版下载 Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support f ...

  2. linux 发送 post 请求

    curl -H "Content-type: application/json" -X POST -d '{"accoId":"IDAP_000000 ...

  3. Python3-os模块详解

    import os # 返回一个目录的名称 print(os.path.basename("d:/python")) # 返回一个目录的目录名 print(os.path.dirn ...

  4. Servlet中的请求转发RequestDispatcher接口的forword与Include的区别

    RequestDispatcher接口中具有两个方法: forward() 与 include() 均 可完成请求 的转发.区别如下: forword(): 使用该方法,则当前 的 Servlet 中 ...

  5. C#窗体的resx文件

    这些图片在项目文件中没找到,原来都存在了resx文件中. 属性界面的Image.BackgroundImage属性手动选择的图片会自动存储到resx文件中,之后这些图片源文件就可以删除了.resx中的 ...

  6. JVM(九),垃圾回收回收算法

    九.垃圾回收回收算法 1.标记-清除(Mark and Sweep) 缺点是内存空间碎片化太严重 2.复制算法(Copying) (1)复制算法介绍 (2)复制算法优势 3.标记-整理算法(Compa ...

  7. CodeForces–830A--二分,贪心

    Office Keys time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  8. IDEA的小技巧:1.Java代码不被识别2.目录下创建的文件夹所显示样式不是文件夹,而是"包"图标样式的问题

    在Idea上面一个正常的代码结构是这个样子的,但是有的时候,比如说当我们直接在一个文件夹中随便的创建的时候就会出现一些问题,比如说想让某个地方为代码目录,某个地方为资源目录的时候,直接的创建目录是不成 ...

  9. Linux TC限制流量

    一.TC原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. Linux流量控制的基本原理如 ...

  10. Java——重写hashCode()和euqals()方法

    1.顺序表的问题 查找和去重效率较低 对于这样的顺序表来说,如果需要查找元素,就需要从第一个元素逐个检查,进行查找.对于需要去重的存储来说,每次存入一个元素之前,就得将列表中的每个元素都比对一遍,效率 ...