最小操作次數的簡易版 解 英雄會

2021-08-27 15:53:43 字數 1366 閱讀 7177

給定兩個字串,僅由小寫字母組成,它們包含了相同字元。 求把第乙個字串變成第二個字串的最小操作次數,且每次操作只能對第乙個字串中的某個字元移動到此字串中的開頭。

例如給定兩個字串「abcd" "bcad" ,輸出:2,因為需要操作2次才能把"abcd"變成「bcad" ,方法是:abcd->cabd->bcad。

說起來也是有點意外,這一題前兩天看了一下,當時感覺有點複雜,就暫時先放下了,昨晚瀏覽的時候順便又看了一下,一看是兩星難度的(有點欺軟怕硬,不過結合難度來不同考慮感覺是有必要的),就把題目記下了,不過當時已經兩點了...就趕快**了,有些睡不著,這題的思路就自己蹦出來了(幸運o(∩_∩)o 哈哈),當時記下了,準備今天早上試試。

比較幸運,早上接著昨晚的思路來,感覺沒多大問題,交了一下,竟然有點問題...當時被打擊了,後來發現計算字串大小的時候是用sizeof(a)的,汗啊...

下面說說思想吧,題目的要求是將每個字元移動到字串的開頭,所以最先移動的就慢慢靠後了,當時的思想是由後面向前匹配,由target最後乙個字元在source的最後乙個字元開始匹配,若匹配上了,target,source繼續向前匹配,若是沒有匹配成功,則在source繼續向前匹配,直到找到為止,下次的匹配由此點開始。

ps:a是source,b是target

在if(b[i] == a[j])中,剛開始丟了個j--;因為此時已經匹配了,所以source[j](即a[j])下次不能使用,但是在英雄會裡通過了,可能是測試點太少了,不過是不可以缺少的。

可以拿字串"tacdetst"以及"teasdctt"試試;

if(b[i] == a[j])  //匹配到,計數+1,繼續向前匹配

通過將j--;注釋,即可得到效果;

沒有模擬它的移動過程,有點取巧,但是不失是個好方法。

好的,**貼上:

#include#include#includeint getnumber (char* a,char* b)

else}}

if(j < 0) //匹配結束

break;

}return n - count;

}int main()

測試用例:結果:

有什麼不清楚各位說說...

大神們有什麼建議,可以提點一下...多多交流,3q.......o(∩_∩)o 哈哈

最小操作次數的簡易版 解 英雄會

給定兩個字串,僅由小寫字母組成,它們包含了相同字元。求把第乙個字串變成第二個字串的最小操作次數,且每次操作只能對第乙個字串中的某個字元移動到此字串中的開頭。例如給定兩個字串 abcd bcad 輸出 2,因為需要操作2次才能把 abcd 變成 bcad 方法是 abcd cabd bcad。說起來也...

最少操作次數的簡易版

給定兩個字串,僅由小寫字母組成,它們包含了相同字元。求把第乙個字串變成第二個字串的最小操作次數,且每次操作只能對第乙個字串中的某個字元移動到此字串中的開頭。例如給定兩個字串 abcd bcad 輸出 2,因為需要操作2次才能把 abcd 變成 bcad 方法是 abcd cabd bcad。incl...

簡易版的Tween

與之前的tween 類似,只是這個為簡潔版 動畫處理器 緩動效果 param obj dom物件 param prop 要改變的樣式屬性,如left 填opacity時,1表示不透明,0表示完全透明 param v1 初始值 不帶px param v2 終止值 不帶px param opt obje...