問題一:給定乙個字串,在字串末尾新增字元,使得新字串位回文字串,求解需要新增的最少字元個數,並給出新增後構成的回文
思路:將原字串str1逆序構成另乙個字串str2,然後求出原字串和逆序串的最大公共子串行的長度,用原字串的長度減去最大公共子串行的長度就是需要新增的字元個數min;求出構成的回文串,即在原字串的基礎上,新增上從逆序的min->str2.length,就可以構成回文串
1輸出結果為public
class
test3
11 result = new
int[str1.length()+1][str2.length()+1];
1213
lcs(str1, str2);
1415
int min = str1.length() -result[str1.length()][str2.length()];
16 system.out.println("構造回文串最少新增的個數為:" +min);
17 stringbuffer str = new
stringbuffer(str1);
18for (int i = min-1; i < str2.length(); i++)
21 system.out.println("構造出的回文字串為:" +str);22}
2324
/**25
* 求出最大公共子串行的長度 並記錄構造表資訊
26*
@param
str1
27*
@param
str2
28*/
29static
void
lcs(string str1, stringbuffer str2)
36for (int i = 0; i <= str2.length(); i++)
39for (int i = 1; i <= str1.length(); i++) else
if(result[i - 1][j] >= result[i][j-1]) else48}
49}50}
51 }
問題二:給定乙個字串str,可以從中刪除一些字串,使得剩下的字串成為乙個回文字串,如何保證刪除之後的字串位最長,求出需要刪除的字元個數
思路:同樣運用動態規劃的方式求解,二維表dp表示子串str[i...j]需要最少刪除幾個字元可以使得新的字串位回文字串。考慮簡答情況,如果str長度等於1,那麼不需要刪除,即刪除個數為0;如果遠字串長度為2,那麼任意刪除乙個,就變為回文串了;如果長度大於2,若str[i] == str[j],那麼dp[i][j] = 0,表示已經是乙個回文串,不需要刪除,如果str[i]≠str[j],則需要刪除。具體實現方式為,將str[i+1][j]變為回文串或者將str[i][j-1]變為回文串,比較兩種方式代價小的,然後更新dp[i][j]=min(dp[i+1][j]+dp[i][j-1]) + 1;
**實現:
1執行結果:測試str為ab3bd/**2
* 刪除乙個字串中的字元 使其成為回文串3*/
4static
intdeletetopalindrome(string str) else
1112
for (int j = i-2; j > -1; j--) else18}
19}20return dp[0][str.length()-1];
21 }
posted @
2018-11-30 23:24
風沙迷了眼 閱讀(
...)
編輯收藏
動態新增或刪除select的option
1.動態建立select function createselect 設定select的選定值 type attr value user type 2.新增option function addoption 3.刪除所有的iption function removeall 4.刪除乙個option ...
Python是動態語言 動態新增或刪除屬性 方法
python元類 python裝飾器 python真正入門的鑑定標準 例項 class person def init self,name self.name name 定義乙個物件 mark person mark 終於修煉 了,好開森 print 報出我的大名 mark.name 直接新定義屬性...
融雲IMKit 動態刪除或新增plugin 的實現
在整合融雲的過程中,由於專案要求比較緊急,所以使用了融雲的imkit 帶有ui介面的 但是由於使用融雲方面的自帶的ui 所以就會不可避免的就會有些自定義化的需求 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img 5kvd52qu 1615362079975 第一步 需要先複寫 co...