一座矿山,可以将矿山抽象地看成一个字符串S
其中的每个矿山可以看成一个字符,其中当一些矿山遵循一种特殊的元素排列时(用字符串P表示),它就能构成一块能源石。
同时,相邻的两块能源石能够融合成一块更大的能源石,融合时它们前缀和后缀相同的部分可能会重叠在一起。
比如:标准的能源石排列为aba,那么两块标准能源石的融合结果就可能为{abaaba,ababa,aba}
一块能源石的能量等于它长度的平方。
现在小Q希望你告诉他最多可以获得多少能量
xyabababcba
ab
代码
1 import java.util.ArrayList; 2 import java.util.Scanner; 3 4 public class Tengxun2nengyuanshi { 5 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 // 一座矿山,可以将矿山抽象地看成一个字符串S 9 // 10 // 其中的每个矿山可以看成一个字符,其中当一些矿山遵循一种特殊的元素排列时(用字符串P表示),它就能构成一块能源石。 11 // 12 // 同时,相邻的两块能源石能够融合成一块更大的能源石,融合时它们前缀和后缀相同的部分可能会重叠在一起。 13 // 14 // 比如:标准的能源石排列为aba,那么两块标准能源石的融合结果就可能为{abaaba,ababa,aba} 15 // 16 // 一块能源石的能量等于它长度的平方。 17 // 18 // 现在小Q希望你告诉他最多可以获得多少能量 19 // xyabababcba 20 // ab 21 //36 22 //aaa 23 //aa 24 //9 25 Scanner sc = new Scanner(System.in); 26 String s = sc.next(); 27 String p = sc.next(); 28 System.out.println(nengYuanShi(s, p)); 29 sc.close(); 30 } 31 32 public static int nengYuanShi(String s, String p) { 33 // int len = 0;xyabababcba 34 // int nengliang = 0; 35 int max = 0; 36 37 // char[] sch = s.toCharArray(); 38 char[] pch = p.toCharArray(); 39 StringBuffer pbuff = new StringBuffer(); 40 StringBuffer sbuff = new StringBuffer(); 41 // pbuff.append 42 ArrayList<String> parr = new ArrayList<String>(); 43 parr.add(p); 44 // if(pch.length>2) { 45 for (int i = 0; i < pch.length; i++) { 46 47 if (pch.length - 1 - i > i && pch[i] == pch[pch.length - 1 - i]) { 48 pbuff.append(p).delete(pch.length - 1 - i, pch.length).append(p); 49 parr.add(pbuff.toString()); 50 } 51 pbuff = null; 52 // } 53 } 54 ArrayList<Integer> arr = new ArrayList<Integer>(); 55 sbuff.append(s); 56 for (int j = 0; j < parr.size(); j++) { 57 // int max = 0; 58 int len = 0; 59 String p1 = parr.get(j); 60 // char[] ps = parr.get(j).toCharArray(); 61 62 while (sbuff.toString().contains(p1)) { 63 // len = p1.length(); 64 int index = s.indexOf(p1.charAt(0)); 65 // if (s.charAt(index + p1.length()) == p1.charAt(0)) { 66 sbuff.delete(index, index + p1.length()); 67 len += p1.length(); 68 // } 69 70 } 71 arr.add(len); 72 len = 0; 73 74 sbuff.replace(0, sbuff.length(), s); 75 for (int k : arr) 76 max = Math.max(max, k); 77 // max += Math.pow(len, 2); 78 // nengliang += Math.pow(max, 2); 79 } 80 return (int) Math.pow(max, 2); 81 } 82 83 }
方法二:
1 public static int nengYuanShi2(String s, String p) { 2 int slen = s.length(); 3 int plen = p.length(); 4 int t = 0; 5 int x = 0; 6 int n = 0; 7 String ss=null; 8 for (int i = 0; i < slen +1; i++) { 9 if(i+plen>slen) 10 ss=s.substring(i); 11 else 12 ss = s.substring(i, i + plen); 13 if (ss .equals(p) ) { 14 t++; 15 x = plen - 1; 16 } else { 17 if (x > 0) { 18 t++; 19 x--; 20 } else { 21 n += t * t; 22 t = 0; 23 } 24 } 25 } 26 return n; 27 }