如何通過只翻轉乙個字串的子串對該字串進行排序?

時間 2021-05-12 01:16:02

1樓:

老版題是NP很多人已經給出參考文獻了。

新版題是裸dp:設len是字串strls的長度,那麼定義dp[len+1][2]表示直到長度x(0<=x<=len),最後一位strls[x-1]不翻轉/翻轉(0/1)所需的最小翻轉次數。

2樓:yaoyao

反轉兩個字元的子串不就是交換兩個字元的位置嗎?這是氣泡排序呀

喵的,題主搞錯了題目。。。但這個整體公升序該如何理解?af-cb-ak翻轉cb成af-bc-ak?

3樓:吳木木

壞的結果總比沒有結果強,sorry,好壞算種演算法了,力有未逮。

演算法有問題,正在修改。。。。。。。

定義1:最大無序塊,即某子串是無序的且其左右邊界以外的部分全部在正確順序位置。

定義2:字串對某字元ξ基本順序,即對於某字串中的字元ξ,在其前面的字元的正確順序都在其前,且在其之後的字元的正確順序都在其後。

類似的,可定義字串對某字元ξ基本逆序。

定義3:字串對某字元ξ基本有序,即字串對某字元ξ基本順序或基本逆序。字元ξ稱為字串的核。

定義4:縫隙(ε,η),即字串中任意相鄰的兩個字元ε和η的組合。

定義5:字串對某縫隙(ε,η)基本順序,即對於某字串中的縫隙(ε,η),在其前面的字元的正確位置都位於其後面的字元的正確位置之前。

類似的,可定義字串對某縫隙(ε,η)基本逆序。

定義6:字串對某縫隙(ε,η)基本有序,即字串對某縫隙(ε,η)基本順序或基本逆序。縫隙(ε,η)也稱為字串的核。

定義7:可翻轉的,即對於任何乙個無序塊,至少存在乙個字元ξ或者縫隙(ε,η),使得該無序塊對此字元ξ或者縫隙(ε,η)基本有序,則稱此無序塊是可翻轉的。

基本思路:

1、尋找目的字串中的最大無序塊;

2、檢視此無序塊是否為可翻轉的,若不是,將其中最大或小字元翻轉到正確邊界位置,反覆此過程直至最大無序塊為可翻轉的並翻轉至基本順序;

3、利用字串的「核」將字串分割成左右兩個字元子串;

4、遞推進行步驟1-3。

為了直觀,用數字做例子,如:25431(1為核)→13452(2為核)→12543(4為核)→12345

3412((4,1)為核)→2143(分成21和43兩部分)→1234(21和43分別翻轉)以上。

C語言,用陣列定義乙個字串,那這個字串是怎麼儲存在這個陣列中的呢?

the gc 對於scanf的 s的解釋如下 Matches a sequence of non white space characters the nextpointer must be a pointer to the initial element of acharacter array t...

python如何統計乙個字串中各字元的數量?

Shreck Ye 其實因為字符集是已知而且連續的,直接按字元編碼對映到乙個記憶體陣列裡面效率要比字典更高。不過既然是Python,變數都是用字典存的,效率似乎就無所謂了,更重要的是怎麼寫更簡單更快。這裡用字典也更方便簡單,參照高讚答案用collections.Counter一行就可以解決更好。 2...

python中,乙個字串內有多次出現的 a ,如何用找到第n個 a 的位置?

酒罈壇兒 defindex str1 char,n 獲取指定字串中第n個指定字元在字串中的下標 param str1 指定字串 param char 指定字元 param n 個數 return 下標,如果找不到返回None location None count 0 forx inrange le...