Skip to main content
LeetCode 30, Hard. Topics: Hash Table, String, Sliding Window. View on LeetCode. Generate this problem as a practice environment: tested reference solution, 18 parametrized pytest cases, and a playground notebook:

Problem

You are given a string s and an array of strings words. All the strings of words are of the same length. A concatenated string is a string that exactly contains all the strings of any permutation of words concatenated.
  • For example, if words = ["ab","cd","ef"], then "abcdef", "abefcd", "cdabef", "cdefab", "efabcd", and "efcdab" are all concatenated strings. "acdbef" is not a concatenated string because it is not the concatenation of any permutation of words.

Examples

Explanation: The substring starting at 0 is “barfoo”. It is the concatenation of [“bar”,“foo”] which is a permutation of words. The substring starting at 9 is “foobar”. It is the concatenation of [“foo”,“bar”] which is a permutation of words.
Explanation: There is no concatenated substring.
Explanation: The substring starting at 6 is “foobarthe”. It is the concatenation of [“foo”,“bar”,“the”]. The substring starting at 9 is “barthefoo”. It is the concatenation of [“bar”,“the”,“foo”]. The substring starting at 12 is “thefoobar”. It is the concatenation of [“the”,“foo”,“bar”].

Constraints

  • 1 <= s.length <= 10^4
  • 1 <= words.length <= 5000
  • 1 <= words[i].length <= 30
  • s and words[i] consist of lowercase English letters.

Solution

Reference implementation from solution.py on GitHub, full suite in test_solution.py:

Complexity

Tags

Last modified on September 7, 2026