第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何找到從 s1 到 s2 的最小可能循環(huán)移位?

如何找到從 s1 到 s2 的最小可能循環(huán)移位?

子衿沉夜 2023-04-11 15:18:06
如果我有 2 個字符串s1和s2,其中s2是循環(huán)移位的字符串s1。s1它需要找到從到的最小可能循環(huán)偏移s2。讓我舉個例子:s1 = 'I love cookies 's2 = 'cookies I love ' 答案是7。最好采用線性時間。有我失敗的試驗(yàn):def find_minimum_cyclic_shift(s1, s2):        if len(s1) != len(s2):            return -1        index = s2.index(s1[0])        if (index > -1):            if (s1==s2):                return 0;            #finalPosition = len(s2) - index            #print(finalPosition, " index=",index)            #return s2[0] == s1[finalPosition] and s1[finalPosition::]==s2[0:index]        return index但它不適用于 case: absabsabsfand absfabsabs。而不是 4 我有 0. 因?yàn)樗饕瘮?shù)只返回我第一次出現(xiàn)的字母。請至少給我一個邏輯來編碼它。
查看完整描述

1 回答

?
拉丁的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個贊

find您可以簡單地在雙字符串上使用,如下所示:


s1 = 'I love cookies '

s2 = 'cookies I love '


answer = min((s1*2).find(s2), (s2*2).find(s1))

print(answer)

輸出:


7

-1(如果s2不是 的循環(huán)移位,將打印s1)。


它起作用的原因是如果s2確實(shí)是 的循環(huán)移位s1,那么連接s1到自身將包含s2中間的某個地方。


s1幸運(yùn)的是,這個“某處”正好是所需移位的大?。ǔ霈F(xiàn)在s2第一個字符之前的字符數(shù))。


我們還需要檢查“其他方向”以獲得可能更短的移位,因此我們從兩個可能的方向獲取最小結(jié)果(技術(shù)上可以使用算術(shù)來避免第二次搜索,如果結(jié)果是那么答案很簡單 -> n/2結(jié)果n。


關(guān)于運(yùn)行時復(fù)雜性的注意事項:我的解決方案不保證線性時間,基于這個答案,它可以O(shè)(N*N)在最壞的情況下使用。


查看完整回答
反對 回復(fù) 2023-04-11
  • 1 回答
  • 0 關(guān)注
  • 446 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號