My leetcode submissions.
at main 71 lines 2.0 kB view raw
1#include <algorithm> 2#include <array> 3#include <iostream> 4#include <numeric> 5#include <optional> 6#include <string> 7#include <unordered_map> 8#include <utility> 9 10using namespace std; 11 12int maxLengthBetweenEqualCharacters2(string s) { 13 return std::accumulate(s.cbegin(), s.cend(), -1, [mp = array<int, 26>(), idx = 0](auto acc, auto const ch) mutable { 14 if (mp[ch - 'a'] == 0) 15 mp[ch - 'a'] = idx + 1; 16 acc = max(acc, idx - mp[ch - 'a']); 17 ++idx; 18 return acc; 19 }); 20} 21 22auto maxLengthBetweenEqualCharacters(string s) -> int 23{ 24 auto mp = array<optional<pair<int, optional<int>>>, 27>(); 25 26 for (auto idx = 0; auto const& ch : s) { 27 mp[ch - 'a'] = mp[ch - 'a'] 28 ? make_pair(mp[ch - 'a'].value().first, 29 optional<int>{idx}) 30 : make_pair(idx, nullopt); 31 ++idx; 32 } 33 34 return std::accumulate( 35 mp.cbegin(), mp.cend(), -1, 36 [](auto acc, auto const& char_opt) { 37 if (char_opt) { 38 auto const pair = char_opt.value(); 39 auto const difference = 40 pair.second.value_or(pair.first) - 41 pair.first; 42 acc = difference > acc ? difference : acc; 43 } 44 return acc; 45 }) - 46 1; 47} 48 49auto main() -> int 50{ 51 std::cout << maxLengthBetweenEqualCharacters2("aa") << "\t\t 0" 52 << std::endl; 53 std::cout << maxLengthBetweenEqualCharacters2("abca") << "\t\t 2" 54 << std::endl; 55 std::cout << maxLengthBetweenEqualCharacters2("cbzxy") << "\t-1" 56 << std::endl; 57 std::cout << maxLengthBetweenEqualCharacters2("abac") << "\t\t 1" 58 << std::endl; 59 std::cout << maxLengthBetweenEqualCharacters2("ab") << "\t\t-1" 60 << std::endl; 61 std::cout << maxLengthBetweenEqualCharacters2("a") << "\t\t-1" 62 << std::endl; 63 std::cout << maxLengthBetweenEqualCharacters2("cabbac") << "\t 4" 64 << std::endl; 65 std::cout << maxLengthBetweenEqualCharacters2("cabad") << "\t 1" 66 << std::endl; 67 std::cout << maxLengthBetweenEqualCharacters2( 68 "mgntdygtxrvxjnwksqhxuxtrv") 69 << "\t18" << std::endl; 70 return 0; 71}