2016藍橋杯省賽java C組第十題 --密碼脫落
阿新 • • 發佈:2018-12-31
暑假以來刷藍橋杯題,實在被暴力所折服,終於碰到一眼前一亮的題~~~
第一篇線上的部落格,開寫~~~
密碼脫落
X星球的考古學家發現了一批古代留下來的密碼。
這些密碼是由A、B、C、D 四種植物的種子串成的序列。
仔細分析發現,這些密碼串當初應該是前後對稱的(也就是我們說的映象串)。
由於年代久遠,其中許多種子脫落了,因而可能會失去映象的特徵。
你的任務是:
給定一個現在看到的密碼串,計算一下從當初的狀態,它要至少脫落多少個種子,才可能會變成現在的樣子。
-----------------------------------
輸入一行,表示現在看到的密碼串(長度不大於1000)
要求輸出一個正整數,表示至少脫落了多少個種子。
例如,輸入:
ABCBA
則程式應該輸出:
0
再例如,輸入:
ABDCDCBABC
則程式應該輸出:
3
資源約定:
峰值記憶體消耗(含虛擬機器) < 256M
CPU消耗 < 3000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘內容。
所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效程式碼處理。
-----------------------------------
冷不丁一看好難的一道題,詳細地考慮後決定從兩端開始比較,搞清楚幾種情況,問題就迎刃而解了~
package lanqiaobei; import java.io.*; import java.util.Scanner; public class mimatuoluo { //static int num = 0; static char a[]; //static int len = a.length; public static int f(int left,int right){ int num = 0; if(left>=right) return num; if(a[left] == a[right]) num = f(left+1,right-1); else if(a[left] == a[right-1]) num = f(left,right-1) + 1; else if(a[left+1] == a[right]) num = f(left+1,right) + 1; else { num = (f(left,right-1)+1)<(f(left,right-1)+1)?(f(left,right-1)+1):(f(left,right-1)+1); } return num; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner s = new Scanner(System.in); String str = s.nextLine(); a = str.toCharArray(); int len = a.length; System.out.println(f(0,len-1)); } }