所以我试图用Java解决下面的问题。有人能告诉我如何处理这个问题吗?我只能想到使用一堆令人困惑的for循环来分割arr,浏览字母表,然后浏览每个字符串,即使这样我也很困惑字符串与字符。任何建议都会很棒。
-
假设字母“A”值1,“B”值2,依此类推,“Z”值26.单词的值是其中所有字母值的总和。给定由大写字母组成的单词数组,返回具有最大值的监视值。您可以假设arr的长度至少为1。
{“AAA”,“BBB”,“CCC”} => 9
{“AAAA”,“B”,“C”} => 4
{“Z”} => 26
{“”,“”} => 0
-
这是我到目前为止所尝试的但是我迷路了:
public static int largestValue(String[] arr){
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int largest = 0;
int wordTotal=0;
for (int i = 0; i < arr.length; i++){
String[] parts = arr[i].split("");
if (wordTotal < largest){ //I don't think this is in the right place
largest = 0; }
for (int j = 0; j < alphabet.length(); j++){
for(int k = 0; k <parts.length; k++){
if ( alphabet.charAt(j) == parts[k].charAt(0) ){
wordTotal = 0;
wordTotal += alphabet.indexOf(alphabet.charAt(j))+1;
}
}
}
}
return largest;
}
答案 0 :(得分:2)
我将启动将问题分解为多个部分,第一步是将一个String
相加。要计算sum
您可以迭代字符,请测试字符是否在'A'
和'Z'
之间(尽管您的要求表明您的输入有效),减去{{1}来自角色的('A'
字面值)并将其添加到char
。像,
sum
然后你可以迭代一个static int sumString(final String str) {
int sum = 0;
for (char ch : str.toCharArray()) {
if (ch >= 'A' && ch <= 'Z') { // <-- validate input
sum += 1 + ch - 'A'; // <-- 'A' - 'A' == 0, 'B' - 'A' == 1, etc.
}
}
return sum;
}
(s)数组来获得最大总和;
String
使用Java 8 + 或
static int maxString(String[] arr) {
int max = sumString(arr[0]);
for (int i = 1; i < arr.length; i++) {
max = Math.max(max, sumString(arr[i]));
}
return max;
}
并且,最后,验证整个操作,如
static int maxString(String[] arr) {
return Stream.of(arr).mapToInt(x -> sumString(x)).max().getAsInt();
}
我得到了
public static void main(String[] args) {
String[][] strings = { { "AAA", "BBB", "CCC" }, { "AAAA", "B", "C" },
{ "Z" }, { "", "" } };
for (String[] arr : strings) {
System.out.printf("%s => %d%n", Arrays.toString(arr), maxString(arr));
}
}
答案 1 :(得分:1)
我认为在这里注意两个关键部分是有帮助的:
1:您需要能够找到单个单词的值,即每个单词的总和
2:您需要找到所有单词的值,并找到最大的
因为你需要遍历字符串中的每个元素(字母/字符),以及数组中的每个元素(字),所以问题确实设置为使用2个循环。我认为整个问题的一部分是使for循环清晰简洁,这绝对可行。我不想放弃它,但是有一个函数,只要一个字,就会返回单词的值,这将有所帮助。你可以找到一个单词的值,看它到目前为止是否最大,并重复。另外,要查找单词的值,请不要使用26 if(查找ASCII表格!)。希望这能让你在不放弃的情况下获得更好的理解!