日期:2014-05-20 浏览次数:20839 次
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static String[] random(String[] strs){
int index = 0;
for(int i = 0;i<strs.length;i++){
index =Math.abs(new Random().nextInt()%strs.length);
String temp = strs[i];
strs[i] = strs[index];
strs[index] = temp;
}
return strs;
}
public static void main(String[] args) {
String[] str={".15", "7..", "402", "..3",".6.","9.8"};
Test.random(str);
StringBuffer sb = new StringBuffer();
for(String s:str){
sb.append(s);
}
String temp = sb.toString();
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(temp);
int sum = 0;
int Maxsum = 0;
String maxSumStr ="";
System.out.println(sb);
while(m.find()){
String s = m.group(0);
for(int i=0;i<s.length();i++){
sum+=Integer.parseInt(String.valueOf((s.charAt(i))));
}
if(sum > Maxsum){
Maxsum = sum;
maxSumStr = s;
sum = 0;
}
else{
sum=0;//刚才漏掉这句。
}
}
System.out.println("最大值:"+Maxsum);
System.out.println("最大子串"+maxSumStr);
}
}
------解决方案--------------------
讨论了这么久,其实题目本质上是个排列组合求最大值的问题,跟随机没啥关系。
但我认为,就这个题目而言,根本无需这么复杂的去组合它,从需求而言,其实可以考虑一次循环就搞定了。
这个题目中的最大数实际上基本是 ..xxx + yyy + zzz.. 这种组合方式,计算最大值的时候也是按照单个数字相加的最大值,所以也不需要去考虑拼接方式差异所导致数值大小不一样。
所以在一次循环之内,得到最大的 yyy,xxx,zzz,循环结束后,3个值相加,这题目也就算结束了。