博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【一天一道LeetCode】#30. Substring with Concatenation of All Words
阅读量:4197 次
发布时间:2019-05-26

本文共 1705 字,大约阅读时间需要 5 分钟。

注:这道题之前跳过了,现在补回来


一天一道LeetCode系列

(一)题目

You are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s that is a concatenation of each >word in wordsexactly once and without any intervening characters.

For example, given:

s: “barfoothefoobarman”
words: [“foo”, “bar”]

You should return the indices: [0,9].

(order does not matter).

(二)解题

本题需要在s中找到一串子串,子串是words中的单词按一定顺序排列组成的。返回这个子串在s中的起始位置。

主要思路:由于要考虑words中的重复单词,需要用到multiset,加快查找速度
1、首先用multiset存放words中的所有单词
2、遍历s,如果找到words中的某个单词,就在multiset中删除,直到multiset为空,如果没有找到则继续往后查找
3、返回下标的集合

class Solution {public:    vector
findSubstring(string s, vector
& words) { multiset
cnt;//用来存放words中的单词 for (int i = 0; i < words.size(); i++) { cnt.insert(words[i]);//初始化 } vector
ret; int lenw = words[0].length(); int total = words.size() * lenw; int i, j; if (s.length() < total) return ret; for (i = 0; i <= s.length() - total;i++) { multiset
tempcnt = cnt;//拷贝一个副本 for (j = i; j < s.length(); j += lenw) { string temp = s.substr(j, lenw); auto iter = tempcnt.find(temp); if (iter != tempcnt.end())//找到了 { tempcnt.erase(iter);//先删除该元素 if (tempcnt.empty()) {
//为空代表找到了words中的所有单词按一定顺序排列的子串 ret.push_back(i); break; } } else {
//没找到 break; } } } return ret; }};

转载地址:http://rayli.baihongyu.com/

你可能感兴趣的文章
(二)Git--工作区和暂存区、管理修改与撤销
查看>>
(七)Git--自定义Git
查看>>
(五)Git--分支管理
查看>>
(四)Git--远程仓库
查看>>
(六) Git--标签管理
查看>>
java中继承,子类是否继承父类的构造函数
查看>>
什么是Spring Cloud ?
查看>>
pyqt实现界面化编程
查看>>
qt写DLL文件并调用和出现的问题分析
查看>>
工厂模式(Factory)-设计模式(一)
查看>>
建造者模式(Builder)-设计模式(三)
查看>>
初学Java必备基础知识,编程领域你需要掌握的关键点!
查看>>
阿里五年Java程序员的总结,献给还在迷茫中的你!
查看>>
程序员身上有异味,同事为什么都不会直接告诉他?
查看>>
Java、C、C+ +、PHP、Python分别用来开发什么?一篇文章告诉你!
查看>>
Linux-SHELL常用命令
查看>>
Linux-网络运维基础
查看>>
Verilog编程网站学习——门电路、组合电路、时序电路
查看>>
android——学生信息显示和添加
查看>>
Android——ImageSwitcher轮流显示动画
查看>>