"""
題目分析:
這是中等難度題,讀題目都沒讀懂;看了題解中的說明才理解題目的意思;實際上就是求字符串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] | 退出循環 |