求最大值,菜鸟,求教
有个字符串数组,字符串内只有数字和“.”,比如String[] str={".15", "7..", "402", "..3"},代表有4个字符串,每个元素长度都为 3,现在将数组里面元素进行随机组合成字符串(打乱顺序),
比如将元素按"..3.154027.."的顺序相连。然后截取其中连续的片段"154027"。连续的数字的总和为1+5+4+0+2+7=19。这个19是所有组合里面得到的最大的值。Java怎么实现啊。
[解决办法]
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个值相加,这题目也就算结束了。