Оптимальным решением является O (n), потому что в любом случае вы должны пройти обе строки, чтобы применить операцию к соответствующим символам или проверить результат примененной операции к строкам.
Что касается Конкретное решение задачи я могу предложить использовать стандартный алгоритм std::inner_;product
.
Например
#include <iostream>
#include <string>
#include <functional>
#include <iterator>
#include <numeric>
int main()
{
std::string s1 = "1322113";
std::string s2 = "2312213";
auto n = std::inner_product( std::begin( s1 ), std::end( s1 ),
std::begin( s2 ),
size_t( 0 ),
std::plus<>(),
std::equal_to<>() );
std::cout << "n = " << n << '\n';
return 0;
}
Выходные данные программы:
n = 4
Если вы хотите посчитать количество неравных символов в одинаковых позициях, тогда вместо объекта функции std::equal_to
используйте std::not_equal_to