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...