Computer >> Máy Tính >  >> Lập trình >> Python

Tìm chuỗi con có độ dài K không có ký tự lặp lại trong Python


Giả sử chúng ta có một chuỗi S, chúng ta phải tìm số chuỗi con có độ dài K mà không có ký tự nào được lặp lại. Vì vậy, nếu S =“heyfriendshowareyou” và K là 5, thì đầu ra sẽ là 15, vì các chuỗi là [heyfr, eyfri, yfrie, frien, riend, iends, endh, ndsho, dshow, showa, howar, oware, warey, areyo , reyou]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • tạo một bản đồ trống m và left:=0 and right:=-1 and ans:=0
  • while right <độ dài của chuỗi - 1
    • nếu phải - trái + 1 =k, thì
      • tăng ans lên 1
      • giảm m [str [left]] đi 1
      • tăng bên trái 1
      • tiếp tục đến lần lặp tiếp theo
    • nếu str [right + 1] không ở trong m, thì
      • đặt m [str [right + 1]]:=1
      • tăng ngay 1
    • else nếu m [str [right + 1]] là 0 thì
      • tăng m [str [right + 1]] lên 1
      • tăng ngay 1
    • khác
      • giảm m [str [left]] đi 1
      • left:=left + 1
  • nếu phải - trái + 1 =k, thì tăng a thêm 1
  • trả lại ans

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

class Solution(object):
   def numKLenSubstrNoRepeats(self, S, K):
      m = {}
      left = 0
      right = -1
      ans = 0
      while right<len(S)-1:
         if right - left + 1 == K:
            ans+=1
            m[S[left]]-=1
            left+=1
            continue
         if S[right+1] not in m :
            m[S[right+1]]=1
            right+=1
         elif not m[S[right+1]]:
            m[S[right+1]]+=1
            right+=1
         else:
            m[S[left]]-=1
            left+=1
      if right - left + 1 == K:
         ans+=1
      return ans
ob1 = Solution()
print(ob1.numKLenSubstrNoRepeats("heyfriendshowareyou", 5))

Đầu vào

"heyfriendshowareyou"
5

Đầu ra

"AIIOC"