腾讯笔试2

一座矿山,可以将矿山抽象地看成一个字符串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 }

猜你喜欢

转载自www.cnblogs.com/ncznx/p/9690458.html
今日推荐