fork download
  1. class Solution:
  2. s = ""; k = 0; p = 0; found = []
  3. def init(self, s: str, k: int, m: int, u: int):
  4. self.s = s; self.k = k; self.p = 1 << m; self.found = [False]*u
  5. def suffix(self, s: str, n: int, m: int) -> int:
  6. x = 0; p = 1; i = n-1
  7. while m > 0:
  8. if self.s[i] == '1':
  9. x += p
  10. m -= 1; p = p << 1
  11. return x
  12. def has_all_codes(self, i: int, u: int, x: int) -> bool:
  13. if u == 0:
  14. return True
  15. if i < 0:
  16. return False
  17. if self.s[i] == '1':
  18. x += self.p
  19. if not self.found[x]:
  20. u -= 1; self.found[x] = True
  21. return self.has_all_codes(i-1,u,x>>1)
  22. def hasAllCodes(self, s: str, k: int) -> bool:
  23. m = k-1; n = len(s); q = n-k+1; u = 1 << k
  24. if q < u:
  25. return False
  26. self.init(s,k,m,u)
  27. return self.has_all_codes(q-1,u,self.suffix(s,n,m))
Success #stdin #stdout 0.03s 9076KB
stdin
Standard input is empty
stdout
Standard output is empty