Редакция для Различия по позициям
Submitting an official solution before solving the problem yourself is a bannable offence.
Разбор задачи «Различия по позициям»
1. Идея
Нужно сравнить две строки s и t одинаковой длины посимвольно и посчитать, в скольких позициях символы не совпадают.
Самая прямая идея: пройти по всем индексам от 0 до |s| - 1 и каждый раз проверять, равны ли s[i] и t[i]. Если нет — увеличивать счётчик.
2. Наблюдения
По условию строки имеют одинаковую длину, значит можно спокойно сравнивать символы с одинаковыми индексами.
Нас интересует только количество несовпадений, а не сами позиции.
Ограничение до
2 * 10^5символов означает, что нужен линейный алгоритм — один проход по строкам отлично подходит.
3. Алгоритм
- Считать строки
sиt. - Завести переменную
diff = 0. - Для каждого индекса
iот0доlen(s) - 1:- если
s[i] != t[i], увеличитьdiffна 1.
- если
- Вывести
diff.
4. Почему это работает
Мы рассматриваем каждую позицию ровно один раз.
- Если в позиции
iсимволы одинаковые, эта позиция не должна учитываться. - Если в позиции
iсимволы разные, она должна увеличить ответ на 1.
Так как алгоритм проверяет все позиции и для каждой принимает именно такое решение, итоговый счётчик diff в точности равен количеству отличающихся позиций.
5. Сложность
Пусть длина строк равна n.
- Время работы:
O(n), потому что выполняется один проход по строкам. - Память:
O(1), если не считать память на хранение самих строк.
6. Код на C++17
#include <iostream>
#include <string>
using namespace std;
int main() {
string s, t;
cin >> s >> t;
int diff = 0;
for (int i = 0; i < (int)s.size(); i++) {
if (s[i] != t[i]) {
diff++;
}
}
cout << diff << '\n';
return 0;
}
7. Код на Python 3
s = input()
t = input()
diff = 0
for i in range(len(s)):
if s[i] != t[i]:
diff += 1
print(diff)
Комментарии