博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从头做leetcode之leetcode 30 串联所有单词的子串
阅读量:2435 次
发布时间:2019-05-10

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

30.串联所有单词的子串

给定一个字符串 s 和一些长度相同的单词 words。找出 s 中恰好可以由 words 中所有单词串联形成的子串的起始位置。

注意子串要与 words 中的单词完全匹配,中间不能有其他字符,但不需要考虑 words 中单词串联的顺序。

暴力法

  • 将words数组中的字符串都存入一个哈希表中,从双指针遍历s字符串,一个指针位于遍历头部,另一个以words数组中单个字符串长度为步长从i位置遍历,如果j遍历到的字符串在哈希表中没有,直接i++,若有,存入一个辅助的哈希表接着遍历,直到长度达到结果长度。如果辅助哈希表与原哈希表完全一样,则将i存入结果数组,最后清空辅助哈希表,继续遍历。
class Solution {public:    vector
findSubstring(string s, vector
& words) { if(s.empty() || words.empty()) return {}; unordered_map
m1,m2; vector
res; int wordlength=words[0].size(); int resultlength=words.size()*wordlength; if(s.size() < resultlength) return {}; for(int i=0;i < words.size();i++){ m1[words[i]]++; } for(int i=0;i <= s.size()-resultlength;i++){ int j=i; while(j < s.size() && j < i+resultlength){ if(m1.find(s.substr(j,wordlength)) == m1.end()){ break; } else{ m2[s.substr(j,wordlength)]++; } j += wordlength; } if(j-i == resultlength && m2 == m1) res.push_back(i); m2.clear(); } return res; }};

通过时间:

在这里插入图片描述

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

你可能感兴趣的文章
网络上经典的DOS小命令(转)
查看>>
sqlserver中的一些技巧(转)
查看>>
简化Windows 2003域控制器密码(转)
查看>>
GSM无线网络的虚拟分层(转)
查看>>
不用重装 轻松解决Windows系统棘手问题(转)
查看>>
对移动通信网络优化工作的一些见解(转)
查看>>
正确网络配置建议 减少卡机死机的关键(转)
查看>>
智能手机Smartphone开发从零起步(五)(转)
查看>>
SEO技巧中你可能没有注意的细节(转)
查看>>
微软开始二代Windows Live 不见Cloud OS踪影
查看>>
创建ISAPI扩展(转)
查看>>
病毒及木马预警一周播报(06.04.17~04.23)(转)
查看>>
黑客口述:我的第一台3389肉鸡的经历(转)
查看>>
关于 cleanup stack 和 two phase consturction [1](转)
查看>>
Oracle数据导入导出imp/exp (转)
查看>>
如何构建固定网(PSTN)短消息系统(转)
查看>>
Delphi文件管理(三)(转)
查看>>
关于网线的一些问题的解答(转)
查看>>
深度分析Win 2003自动升级补丁功能(转)
查看>>
使用Carbide.vs与VS.NET2003构建Symbian开发平台-S60 平台(转)
查看>>