Skip to content

Commit 336d9f9

Browse files
authored
Create minimum-length-of-anagram-concatenation.py
1 parent e27b9fc commit 336d9f9

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Time: O(sqrt(n) * n + (26 * sum(n/i for i in range(1, n+1) if n%i == 0))) < O(sqrt(n) * n + 26 * sum(n/i for i in range(1, n+1)) = O(sqrt(n) * n + 26 * nlogn)
2+
# Space: O(26)
3+
4+
# number theory, freq table
5+
class Solution(object):
6+
def minAnagramLength(self, s):
7+
"""
8+
:type s: str
9+
:rtype: int
10+
"""
11+
def factors(n):
12+
for i in xrange(1, n+1):
13+
if i*i > n:
14+
break
15+
if n%i:
16+
continue
17+
yield i
18+
if n//i != i:
19+
yield n//i
20+
21+
def check(l):
22+
def count(i):
23+
cnt = [0]*26
24+
for j in xrange(i, i+l):
25+
cnt[ord(s[j])-ord('a')] += 1
26+
return cnt
27+
28+
cnt = count(0)
29+
return all(count(i) == cnt for i in xrange(l, len(s), l))
30+
31+
return min(l for l in factors(len(s)) if check(l))

0 commit comments

Comments
 (0)