zoukankan      html  css  js  c++  java
  • leetcode 30. 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).

    一眼看过去,以为是ac自动机。

    后来看题目发现真难懂,看了看网上的解释,懂了。

    题目意思转换一下就是求,words里面的单词排列组合成 k 求k 在s中出现的位置。 

    比如

    "wordgoodgoodgoodbestword"
    ["word","good","best","good"]

    words里面有4个单词,排列组合出24种字符串k。然后找出k在字符串中s出现的位置。

    当然写代码时我们不能把24种组合都求出来,可以用map处理嘛。

    时间复杂度O(n*m*len(s)) n*m为words中所有单词加起来的长度

    class Solution {
    public:
        vector<int> findSubstring(string s, vector<string>& words) {
            vector<int> ans;
            int n = words.size();
            if (n == 0) return ans;
            int m = words[0].size();
            unordered_map<string, int> mp;
            for (int i = 0; i < n; ++i) {
                mp[words[i]]++;
            }
            for (int i = 0; i + n*m <= s.size(); ++i) {
                int num = 0;
                unordered_map<string, int> mp2 = mp;
                for (int j = 0; j < n; ++j) {
                    string tmp = s.substr(i + j*m, m);
                    if (mp2[tmp] > 0) num++;
                    mp2[tmp]--;
                }
                if (num != n) continue;
                ans.push_back(i);
            }
            return ans;
        }
    };
  • 相关阅读:
    PHP中this,self,parent的区别
    phpcms 模块之间 调用 常用操作列表(二次开发)
    Eclipse快捷键大全(转载)
    phpcms v9 数据库操作函数
    调试 写日志
    phpcms头部代码详细分析
    PHPCMS V9构建模块方法介绍 (二次开发)
    phpcms v9 URL访问中的MVC 2
    【tensorflow】重置/清除计算图
    【今日CV 视觉论文速览】14 Nov 2018
  • 原文地址:https://www.cnblogs.com/pk28/p/7452631.html
Copyright © 2011-2022 走看看