Find Mirror Score of a string.
class Solution {
public:
char Mirror(char character) {
int character_index = character - 'a';
int mirror_index = (
25 - character_index
);
char mirror_character = (
'a' + mirror_index
);
return mirror_character;
}
long long calculateScore(string s) {
std::unordered_map<char, std::stack<int>> unmarked_characters;
long long running_score = 0;
for(int index = 0; index < s.length(); index++) {
char character = s[index];
char mirror_character = Mirror(character);
if (unmarked_characters.contains(mirror_character)) {
int mirror_index = unmarked_characters[mirror_character].top();
unmarked_characters[mirror_character].pop();
running_score += (long long)(index - mirror_index);
if (unmarked_characters[mirror_character].empty()) {
unmarked_characters.erase(mirror_character);
}
continue;
}
// otherwise place it in the unmarked characters
unmarked_characters[character].push(index);
}
return running_score;
}
};