当前位置:   article > 正文

LeetCode 30. Substring with Concatenation of All Words(词语拼接组合)

substring with concatenation of all words

题目描述:

    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 words exactly 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中所有单词恰好一次。返回所有满足的坐标集合。
    思路:假设S长度为n1,words长度为n2,words每个单词长度为n3。我们用一个map统计words中出现的所有单词,并且从S中任意i位置开始,考察连续n2个n3长度的子字符串:如果某个子字符串在map中没有出现,则i位置不符合;如果出现了,则map中减去相应单词的出现次数。一轮结束,如果map清空,则找到了一个符合条件的i位置,加入答案中。重复该步骤,直到获取所有满足的坐标。
    时间复杂度为O((n1 - n2 * n3) * n2)。

代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. class Solution {
  4. public:
  5. vector<int> findSubstring(string s, vector<string>& words) {
  6. int n2 = words.size();
  7. // Exceptional Case 1:
  8. if(n2 == 0){
  9. return vector<int>();
  10. }
  11. vector<int> ans;
  12. int n1 = s.length(), n3 = words[0].length();
  13. // debug
  14. // cout << "n1: " << n1 << ", n2: " << n2 << ", n3: " << n3 << endl;
  15. // Exceptional Case 2:
  16. if(n3 == 0){
  17. for(int i = 0; i <= n1; i++){
  18. ans.push_back(i);
  19. }
  20. return ans;
  21. }
  22. map<string, int> m1, m2;
  23. // save the words information
  24. for(int i = 0; i <= n2 - 1; i++){
  25. m1[words[i]]++;
  26. }
  27. for(int i = 0; i <= n1 - n2 * n3; i++){
  28. m2 = m1;
  29. for(int j = 0; j <= n2 - 1; j++){
  30. string str = s.substr(i + j * n3, n3);
  31. if(m2.count(str)){
  32. m2[str]--;
  33. if(m2[str] == 0){
  34. m2.erase(str);
  35. }
  36. }
  37. else{
  38. break;
  39. }
  40. }
  41. if(m2.size() == 0){
  42. ans.push_back(i);
  43. }
  44. }
  45. return ans;
  46. }
  47. };
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/252567
推荐阅读
相关标签
  

闽ICP备14008679号