演算法題 串聯所有單詞的子串

2022-06-29 05:00:13 字數 1023 閱讀 6226

給定乙個字串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。

注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。

示例 1:

輸入:s = "barfoothefoobarman",

words = ["foo","bar"]

輸出:[0,9]

解釋:從索引 0 和 9 開始的子串分別是 "barfoo" 和 "foobar" 。

輸出的順序不重要, [9,0] 也是有效答案。

示例 2:

輸入:s = "wordgoodgoodgoodbestword",

words = ["word","good","best","word"]

輸出:先用乙個hash表儲存words的所有單詞出現的次數,再依次遍歷s,找到與words所有單詞總長度相同的視窗,並將這個視窗的每個單詞與前面的hash表對比,如果一致就記錄下起始點。

class solution ;

int w_size = words[0].size();

if (w_size == 0) return {};

unordered_maphash;

for (const string& word : words)

const int size = w_count * w_size;

int i = 0, j = 0;

vectorres;

for (;j < s.size();)

tmp_hash[sub]++;

if (tmp_hash[sub] > hash[sub])

}if (flag)

i++;

}j++;

}return res;

}};

複雜度

時間複雜度:o(n*m),n是s長度,m是words總長度

空間複雜度:o(m)

演算法 串聯所有單詞的子串

給定乙個字串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。示例 1 輸入 s barfoothefoobarman words...

串聯所有單詞的子串

給定乙個字串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。注意 子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。示例 1 輸入 s barfoothefoobarman word...

串聯所有單詞的子串 leetcode 30題

優化前的 由leetcode大佬寫,優化後是我寫的 優化後 優化思路 例如s efabcdabcdab words ab cd ab 初始map 初始放置submap map是否與submap相等,不等,則移掉 ef 加入 ab efabcd abcdab ef abcdab cdab map是否與...