#include <string>
bool are_all_characters_the_same(const std::string &s) {
return (s.size() == 0) || s.find_first_not_of(s[0]) == std::string::npos;
}
Очевидно, что в худшем случае это невозможно сделать без изучения каждого символа. Какой бы символ (ы) вы не исследовали, он может быть таким же, как другие, или отличаться, и результат должен быть чувствительным к этому в случае, когда те, которые вы проверяете, одинаковы.
Если вы знаете что-то о том, что может быть в строке, то порядок, в котором вы проверяете символы, может повлиять на то, как рано вы сможете спасти. Но ничего не зная, вы можете также прочитать их по порядку, а чтение по порядку может привести к повышению производительности кэша.
Ситуация усложняется, если строка достаточно длинная, чтобы ее можно было распараллелить.