#include <string>
#include <unordered_set>
#include <ranges>
class Solution {
public:
std::string longestNiceSubstring(std::string s) {
if (s.size() < 2) return "";
std::unordered_set<char> chars;
for (const char& c : s) chars.insert(c);
for (auto const& [idx, c] : std::views::enumerate(s) ) {
if (
chars.count(std::tolower(static_cast<unsigned char>(c)))
&&
chars.count(std::toupper(static_cast<unsigned char>(c)))
)
continue;
std::string left = longestNiceSubstring(s.substr(0, idx));
std::string right = longestNiceSubstring(s.substr(idx + 1));
return (left.size() >= right.size()) ? left : right;
}
return s;
}
};