这是小川的第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数组返回即可。

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

03 第二种解法

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

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

  1. public String[] findOcurrences2(String text, String first, String second) {
  2. List<String> result = new ArrayList<String>();
  3. int m = first.length(), i = 0, len = text.length();
  4. while (i < len) {
  5. String tem = first + " " + second + " ";
  6. int index = text.indexOf(tem, i);
  7. if (index == -1) {
  8. break;
  9. }
  10. int start = index+tem.length(), end = start;
  11. while (end < len && text.charAt(end) != ' ') {
  12. end++;
  13. }
  14. if (start < len) {
  15. result.add(text.substring(start, end));
  16. }
  17. i = index + m + 1;
  18. }
  19. return result.toArray(new String[result.size()]);
  20. }

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. luogu1261 服务器储存信息问题[最短路]

    首先$O(n^2\log n)$暴力很好想,直接每个点出发跑一遍最短路,排$dis$统计一下即可.考虑怎么优化.发现$rank$很小,考虑从$rank$入手.换一种统计方法,看每个点$x$如果作为别的 ...

  2. webpack编译sass报错找不到module /css-loader/index.js... || 安装node-sass报错

    今天无论在家还是在公司,安装node-sass总是失败,或安装成功了,使用webpack编译sass报错,说找不到module,按照提示的错误我找了node_modules下的css-loader,发 ...

  3. 自制centos6开机界面

    1.先准备好一张640x480大小的图片并上传至主机(可在画图工具中调整图片大小) 注意如没有rz命令,可以先安装: yum install lrzsz 2.制作背景图 制作需要用到convert命令 ...

  4. 课程 6;比特币产生,分配(2100w,10个矿区)

    www.8btc.com   (每21w个,减半分配)

  5. ssh2整合: No bean named 'sessionFactory' is defined(求大神指点)

    applicationContext.xml 中已经配置 <bean id="sessionFactory" class="org.springframework. ...

  6. Jmeter(十一)函数助手

    可以在JMeter的选项菜单中找到函数助手对话框 我们可以从下拉列表中选择一个函数,并为其参数设定值.如图,表格的左边一列是函数参数的简要描述,右边一列是供用户填充参数的值.不同函数要求的参数也不同. ...

  7. vue子组件改变父组件的值

    1 在父组件的coment绑定事件 <template> <div :class="classObj" class="app-wrapper" ...

  8. [CSP-S模拟测试]:D(暴力+剪枝)

    题目传送门(内部题47) 输入格式 第一行一个正整数$n$.第二行$n$个正整数,表示序列$A_i$. 输出格式 一行一个正整数,表示答案. 样例 样例输入: 530 60 20 20 20 样例输出 ...

  9. DB 分库分表(4):多数据源的事务处理

    系统经sharding改造之后,原来单一的数据库会演变成多个数据库,如何确保多数据源同时操作的原子性和一致性是不得不考虑的一个问题.总体上看,目前对于一个分布式系统的事务处理有三种方式:分布式事务.基 ...

  10. leetcode题目15.三数之和(中等)

    题目描述: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重 ...