Java:将值分配给字母并确定字符串

时间:2016-06-02 02:48:21

标签: java arrays string alphabet

所以我试图用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;
}

2 个答案:

答案 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表格!)。希望这能让你在不放弃的情况下获得更好的理解!