Пояснение к коду (количество общих символов из двух строк) - PullRequest
0 голосов
/ 04 февраля 2020

Учитывая две строки, найдите количество общих символов между ними.

int count1[] = new int[26];
int count2[] = new int[26];
for(int i=0;i<s1.length();i++){
    count1[s1.charAt(i) - 'a']++;
}
for(int i=0;i<s2.length();i++){
    count2[s2.charAt(i) - 'a']++;

}
int common = 0;
for(int i=0;i<26;i++){
    common += Math.min(count1[i],count2[i]);
}
return common;

Я не понимаю, как происходит подсчет общего символа, так как Math.min всегда будет возвращать значение и количество будет продолжать расти. Было бы здорово, если бы кто-нибудь мог объяснить мне логи c создания массива alphabeti c.

Ответы [ 2 ]

2 голосов
/ 05 февраля 2020

Допустим, у вас есть общий символ 'a'

Допустим, 'a' встречается 2 раза в первой строке и 3 раза во второй строке .

в этом случае мы имеем: count1[0] = 2 и count2[0] = 3 (где 0 - индекс, соответствующий символу 'a')

сейчас, Math.min(count1[0], count2[0]) похож на Math.min(2, 3) вернет 2, что означает, что наши строки содержат 2 общих символа 'a'. Это значение 2 будет добавлено к переменной common.

Затем l oop будет повторяться для других символов (b, c, d, ...) и переменной common будет расти, накапливая сумму всех общих символов

, например, если 'b' встречается 1 раз в обеих строках, common получит 3 (так как это сделано из суммы 2 для 'a' и 1 для 'b': 2 + 1 = 3),

и так далее, пока мы не достигнем 'z', common вырастет до общей суммы всех общих символов

2 голосов
/ 04 февраля 2020

поэтому давайте возьмем следующие две строки:

s1 = "hello"
s2 = "locally"

когда вы инициализируете два массива, вы создаете 26 индексов для каждого массива для каждой буквы в алфавите. Ваш первый для l oop мутирует первый массив, а ваш второй для l oop мутирует второй. Итак, давайте go через процесс: во время первой итерации первой для l oop он получает значение ASCII h (104), вычитает его из значения ASCII a (97) и передает его как индекс к массиву, который является индексом буквы h в алфавите (8-я буква, поэтому индекс 7). затем он добавляет 1 к этому индексу и продолжает выполнять итерации до тех пор, пока строка не закончится.

Тот же самый процесс происходит для второго для l oop для второй строки.

Для первого массив, индексы e, h, l и o соответственно имеют значения 1, 1, 2 и 1.

Для второго массива индексы a, c, l, o и y соответственно имеют значения 1, 1, 3, 1, 1

Теперь третий для l oop выполняет итерацию по обоим массивам одновременно, находя минимальные значения в каждом индексе и добавляя их считать. Так, например, в первой итерации он получает минимум от 0 до 1, который равен нулю. Но для итерации для индекса l требуется минимум от 2 до 3, то есть 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...