So I was doing this problem on leetcode.
I was doing in python. This is my code
class Solution:
def wordBreak(self, s: str, wordDict: List[str]) -> List[str]:
ans = [];cur = []
def rec(index):
if index==len(s):
ans.append(''.join((cur[:])).strip())
return
for i in range(index,len(s)):
if s[index:i+1] in wordDict:
cur.append(" ")
cur.append(s[index:i+1])
rec(i+1)
cur.pop(-1)
cur.pop(-1)
rec(0)
return ans
On the for loop,
if s[index:i+1] in wordDict:
This creates a copy of string s from the index till i+1 and hence takes O(n) time. If i use string concatenation instead of this, the time complexity will be O(n^2) as strings are immutable in python . I could'nt use list as keys cannot be mutable in dictonary. So what should I do to make the for loop linear time complexity? Is there any way to make the string concatenation linear in python?