My leetcode submissions.
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}