Java:为字母表赋值并确定字符串的值
Java: Assign values to alphabet and determine value of a string
所以我正在尝试解决下面Java中的问题。有人可以告诉我如何处理这个问题吗?我只能想到使用一堆令人困惑的 for 循环来拆分 arr,遍历字母表,遍历每个字符串,即便如此,我还是对字符串与字符感到困惑。任何建议都会很棒。
--
假设字母 'A' 值 1,'B' 值 2,依此类推,'Z' 值 26。一个单词的值是所有单词的总和其中的字母值。给定一个由大写字母组成的单词数组arr,return值最大的手表的值。您可以假设 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;
}
我认为注意这里的两个关键部分会有所帮助:
1:你需要能够求出单个单词的值,即每个字母的总和
2:需要求所有词的值,求最大的
由于您需要遍历字符串中的每个元素 (letter/character) 以及数组中的每个元素(单词),因此问题实际上是为使用 2 个循环而设置的。我认为整个问题的一部分是让 for 循环清晰简洁,这绝对是可行的。我不想放弃它,但是有一个函数,给定一个词,returns 这个词的值,将会有所帮助。你可以找到一个词的值,看看它是否是迄今为止最大的,然后重复。此外,要查找单词的值,请 不要使用 26 if's(改为查找 ASCII table!)。希望这能让你更好地理解而不泄露它!
我会开始 把问题分解成几个部分,第一步是总结一个String
。要计算 sum
你可以迭代字符,测试字符是否在 'A'
和 'Z'
之间(尽管你的要求说你的输入保证有效),减去 '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;
}
然后可以迭代一个String
(s)的数组得到最大和;像
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;
}
或与Java8+
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));
}
}
然后我得到
[AAA, BBB, CCC] => 9
[AAAA, B, C] => 4
[Z] => 26
[, ] => 0
所以我正在尝试解决下面Java中的问题。有人可以告诉我如何处理这个问题吗?我只能想到使用一堆令人困惑的 for 循环来拆分 arr,遍历字母表,遍历每个字符串,即便如此,我还是对字符串与字符感到困惑。任何建议都会很棒。
--
假设字母 'A' 值 1,'B' 值 2,依此类推,'Z' 值 26。一个单词的值是所有单词的总和其中的字母值。给定一个由大写字母组成的单词数组arr,return值最大的手表的值。您可以假设 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;
}
我认为注意这里的两个关键部分会有所帮助:
1:你需要能够求出单个单词的值,即每个字母的总和
2:需要求所有词的值,求最大的
由于您需要遍历字符串中的每个元素 (letter/character) 以及数组中的每个元素(单词),因此问题实际上是为使用 2 个循环而设置的。我认为整个问题的一部分是让 for 循环清晰简洁,这绝对是可行的。我不想放弃它,但是有一个函数,给定一个词,returns 这个词的值,将会有所帮助。你可以找到一个词的值,看看它是否是迄今为止最大的,然后重复。此外,要查找单词的值,请 不要使用 26 if's(改为查找 ASCII table!)。希望这能让你更好地理解而不泄露它!
我会开始 把问题分解成几个部分,第一步是总结一个String
。要计算 sum
你可以迭代字符,测试字符是否在 'A'
和 'Z'
之间(尽管你的要求说你的输入保证有效),减去 '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;
}
然后可以迭代一个String
(s)的数组得到最大和;像
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;
}
或与Java8+
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));
}
}
然后我得到
[AAA, BBB, CCC] => 9
[AAAA, B, C] => 4
[Z] => 26
[, ] => 0