日期:2014-05-20 浏览次数:20676 次
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个值相加,这题目也就算结束了。