Я рекомендую другой подход.Сначала создайте карту для каждой строки.Подсчитайте количество каждого персонажа.Подведите итоги всех минимумов.
Например:
s1 = "abcaa" => map1 = {'a': 3, 'b': 1, 'c': 1}, s2 = "ababc" =>map2 = {'a': 2, 'b': 2, 'c': 1}
=> 2 + 1 + 1 общих символов.
Вместо карты вы можете использоватьмассив, поскольку вы можете преобразовать символ в целое число.
Вместо карты вы можете использовать набор, если вы не хотите считать дубликаты.
s1 = "abcaad" =>map1 = {'a', 'b', 'c', 'd'}, s2 = "ababce" => map2 = {'a', 'b', 'c', 'e'}
С помощью std :: set_intersect вы можете определить общие символы.
#include <algorithm>
#include <iostream>
#include <set>
#include <string>
int main() {
unsigned int t;
std::cin >> t;
while (t--) {
unsigned int n;
std::cin >> n;
std::string temp;
std::cin >> temp;
std::set<char> intersect(temp.begin(), temp.end());
while (--n) {
std::cin >> temp;
std::set<char> tempSet(temp.begin(), temp.end());
std::set<char> newSet;
std::set_intersection(tempSet.begin(), tempSet.end(), intersect.begin(), intersect.end(), std::inserter(newSet, newSet.begin()));
intersect = newSet;
}
for (const auto c : intersect) {
std::cout << c;
}
std::cout << std::endl;
}
return 0;
}