LeetCode | 023.02.27 | 1638. 統計只差一個字符的子串數目

"""
題目分析:
    這是中等難度題,讀題目都沒讀懂;看了題解中的說明才理解題目的意思;實際上就是求字符串s和字符串t中有多少子字符串滿足:只有一位不同
理論:暴力求解
    1.分別循環s和t
    2.每次循環前,初始化diff和指針cur
    3.循環當前指針cur,檢查當個s和t子字符串
    4.如果當前s和t的不同,diff+1
    5.1如果diff==1,表示只有一個不同,加入結果ret+1
    5.2如果diff>1,表示不滿足條件,直接break
    6.返回結果ret
注意/難點:
    s的子字符串和t的子字符串長度相同
"""
class Solution:
    def countSubstrings(self, s: str, t: str) -> int:
        ret=0                                                #初始化變量
        for i in range(len(s)):                              #循環s
            for j in range(len(t)):                          #循環t
                diff=0                                       #字符差異
                cur=0                                        #當前指針
                s1,s2="",""                    #debug only
                while cur+i<len(s) and cur+j<len(t):         #移動當前指針
                    s1+=s[cur+i]               #debug only
                    s2+=t[cur+j]               #debug only
                    if s[cur+i]!=t[cur+j]:                   #檢查是否相同k
                        diff+=1                              #不同數
                    if diff==1:                              #有一個不同
                        ret+=1                               #加入結果
                        print("s:"+s1,"t:"+s2)
                    elif diff>1:                              #>一個不同
                        break                                #退出循環
                    cur+=1                                   #當前指針後移
        return ret                                           #返回結果
        

s = "aba"
t = "baba"
ans=Solution().countSubstrings(s,t)
print(ans)


輸出的結果如下:

以下是用電子表格模擬變量的部分過程:

      s=[cur+i];t=[cur+j]   diff ret
循環s     i=0 a    
  循環t   j=0 b    
    循環當前指針cur cur=0   0 0
    判斷 s[0+0]=s[0+0] a<>b    
    判斷 diff   1 1
  t+1   j=1 a    
    循環當前指針cur cur=0   0 0
    判斷 s[0+0]=s[0+1] a=a    
    判斷 diff   0 0
    循環當前指針cur cur=1   0 0
    判斷 s[1+0]=s[1+1] b=b    
    判斷 diff   0 0
    循環當前指針cur cur=2   0 0
    判斷 s[2+0]=s[2+1] a=a    
    判斷 diff   0 0
  t+1   j=2 a    
    循環當前指針cur cur=0   0 0
    判斷 s[0+0]=s[0+2] a<>b    
    判斷 diff   1 1
    循環當前指針cur cur=1   0 0
    判斷 s[1+0]=s[1+1] b=b    
    判斷 diff   0 0
    循環當前指針cur cur=2   0 0
    判斷 s[2+0]=s[2+1] a=a    
    判斷 diff   0 0
  t+1   j=3 a    
    循環當前指針cur cur=0   0 0
    判斷 s[0+0]=s[0+3] a=a    
    判斷 diff   0 0
    循環當前指針cur cur=1   0 0
    判斷 s[1+0]=s[1+3] 退出循環  
s+1     i=1 b    
  循環t   j=0 b    
    循環當前指針cur cur=0   0 0
    判斷 s[0+1]=s[0+0] b=b    
    判斷 diff   0 0
  t+1   j=1 a    
    循環當前指針cur cur=0   0 0
    判斷 s[0+1]=s[0+1] b<>a    
    判斷 diff   1 1
    循環當前指針cur cur=1   0 0
    判斷 s[1+1]=s[1+1] a<>b    
    判斷 diff   1 2
      退出循環      
  t+1   j=2 a    
    循環當前指針cur cur=0   0 0
    判斷 s[0+1]=s[0+2] b=b    
    判斷 diff   0 0
    循環當前指針cur cur=1   0 0
    判斷 s[1+1]=s[1+2] a=a    
    判斷 diff   0 0
      退出循環      
  t+1   j=3 a    
    循環當前指針cur cur=0   0 0
    判斷 s[0+1]=s[0+3] b<>a    
    判斷 diff   1 1
    循環當前指針cur cur=1   0 0
    判斷 s[1+0]=s[1+3] 退出循環  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章