給定乙個字串 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是否與...