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

    class Solution {
    public:
        vector<int> findSubstring(string s, vector<string> & words) {
            int nums = words.size(), n = s.length(), len = words[0].length();
            vector<int> ret;
    
            unordered_map<string, int> count;
            for (string word : words)
                count[word]++;
    
            for (int i = 0; i < n - len * nums + 1; i++) {
                unordered_map<string, int> seen;
                int j = 0;
                for (; j < nums; j++) {
                    string str = s.substr(i + j * len, len);
                    if (count.find(str) != count.end()) {
                        seen[str]++;
                        if (seen[str] > count[str])
                            break;
                    }else{
                        break;
                    }
                }
                if(j == nums) ret.push_back(i);
            }
    
            return ret;
        }
    };
  • 相关阅读:
    哈希冲突详解(拉链法,开放地址法)
    哈希冲突详解(拉链法,开放地址法)
    排序算法
    排序算法
    加分二叉树
    加分二叉树
    动态规划
    动态规划
    动态规划
    动态规划
  • 原文地址:https://www.cnblogs.com/wxquare/p/5868624.html
Copyright © 2011-2022 走看看