Что именно делает массив ++ [s.charAt (i) - 'A']? - PullRequest
2 голосов
/ 14 ноября 2011
for (int i = 0; i < s.length(); ++i) 
    {
        if (s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') 
        {
            ++array[s.charAt(i) - 'A'];
        }
    }

Я понимаю цикл For.s.length () 26, int [26], если быть точным.так что этот цикл будет происходить 26 раз, 0-25.Если Char в i, 0-25 находится между или равен AZ, он затем переходит к ++array[s.charAt(i) - 'A']; Из того, что я вижу, он добавляет массив один раз за цикл или добавляет значение массива один раз за цикл, для String at char iпервый будет 0, второй будет 2, потому что массивы начинаются с 0. Поэтому добавление массива в местоположение i -'A' - вот где я запутался.

Ответы [ 5 ]

10 голосов
/ 14 ноября 2011

Оператор ++array[s.charAt(i) - 'A']; увеличивает значение в массиве, проиндексированном на s.charAt(i) - 'A'.

. Этот цикл выполняет подсчет числа вхождений каждой буквы в s. * 1006.*

Причина - 'A' заключается в том, что он «сдвигает» значение ascii / unicode, так что A - Z имеет значения 0–25 и, таким образом, более подходит в качестве индекса массива.

9 голосов
/ 14 ноября 2011

array представляется "счетчиком на заглавную букву". Вычитая символ 'A' из произвольного символа в строке, вы получаете индекс буквы в массиве:

'A' - 'A' == 0
'B' - 'A' == 1
'C' - 'A' == 2

Чтобы понять это, вы должны понимать, что Java обрабатывает char так же, как (без знака) short. Следовательно, вы можете сделать расчеты с char

1 голос
/ 14 ноября 2011

количество символов

(количество символов не является исторической фигурой)

0 голосов
/ 25 июня 2019
++array[s.charAt(i) - 'A'];

считать частоту каждого символа в данной строке s и сохранять частоту каждого символа в определенном индексе в массиве.

0 голосов
/ 26 сентября 2017
public class ArrayCharOccurence {
    static final int ASCII = 256;

    static char getMaxOccuringChar(String str) {

        int count[] = new int[ASCII];

        int len = str.length();
        for (int i = 0; i < len; i++)
            count[str.charAt(i)]++;

        int max = -1;
        char result = ' ';

        for (int i = 0; i < len; i++) {
            if (max < count[str.charAt(i)]) {
                max = count[str.charAt(i)];
                result = str.charAt(i);
            }
        }

        return result;
    }

    // Driver Method
    public static void main(String[] args) {
        String str = "sample string";
        System.out.println("Max occurring character is "
                + getMaxOccuringChar(str));
    }
}
...