#include <iostream>
#include <array>
#include <string>
/**
* Finds the last repeated character in a string.
*
* Examples:
* "abca" -> 'a'
* "abcbd" -> 'b'
* "abcde" -> '\0' (no repeated character)
* "abcdxypcbop" -> 'p'
* "abcdxypcbadom"-> 'd'
*
* Time Complexity: O(n)
* Space Complexity: O(1)
*
* @param str Input string.
* @return The last repeated character, or '\0' if none exists.
*/
char findLastRepeatedCharacter(const std::string& str)
{
// Frequency table for all possible unsigned char values.
std::array<int, 256> frequency{};
// Count character occurrences.
for (unsigned char ch : str) {
++frequency[ch];
}
// Traverse from right to left.
for (auto it = str.rbegin(); it != str.rend(); ++it) {
unsigned char ch = static_cast<unsigned char>(*it);
if (frequency[ch] > 1) {
return *it;
}
}
// No repeated character found.
return '\0';
}
int main()
{
std::cout << findLastRepeatedCharacter("abca") << '\n';
std::cout << findLastRepeatedCharacter("abcbd") << '\n';
char result = findLastRepeatedCharacter("abcde");
std::cout << (result ? result : ' ') << '\n';
std::cout << findLastRepeatedCharacter("abcdxypcbop") << '\n';
std::cout << findLastRepeatedCharacter("abcdxypcbadom") << '\n';
}
/*
run:
a
b
p
d
*/