这是小川的第 392次更新,第 422篇原创
今天介绍的是 LeetCode算法题中 Easy级别的第 254题(顺位题号是 1078)。给出单词 first
和单词 second
,以 "first second third"
的形式在某些文本中出现,其中 second
在 first
之后立即出现, third
在 second
之后立即出现。
对于每个此类事件,将 "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
- 文本由空格分隔的单词组成,每个单词由小写英文字母组成。
- 1
- first和second由小写英文字母组成。
题目很简单,要求找出在 first
、 second
出现后紧跟着的第三个单词,而整句话是由空格和单词组成的,直接利用空格切分整句话,变成单词数组,如果数组的当前元素等于 first
,且当前元素的下一个元素等于 second
,就将当前元素的下下个元素添加进 ArrayList
,最后将 ArrayList
转为 String
数组返回即可。
public String[] findOcurrences(String text, String first, String second) {
List result = new ArrayList();
String[] arr = text.split(" ");
for (int i=0; i
如果不使用空格拆分,我们也可以采用遍历字符的方式来处理。
三个单词因为是相连的,所以我们使用前两个单词来找,只要能够找到前两个单词组成的子串,往后再找,直到遇到空格,那么就找到了第三个单词,将其截取出来存入 ArrayList
即可,处理完后,需要将索引往后移,从第二个单词的位置开始下一次寻找。
public String[] findOcurrences2(String text, String first, String second) {
List result = new ArrayList();
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()]);
}
算法专题目前已连续 日更超过八个月,算法题文章 260+篇,公众号对话框回复【 数据结构与算法】、【 算法】、【 数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
Original: https://www.cnblogs.com/xiaochuan94/p/11242023.html
Author: 程序员小川
Title: LeetCode.1078-两词出现后的单词(Occurrences After Bigram)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572982/
转载文章受原作者版权保护。转载请注明原作者出处!