fix: handle odd-length palindromes by preserving middle character
This commit is contained in:
+6
-1
@@ -9,6 +9,7 @@ public:
|
||||
std::string smallestPalindrome(std::string s, int k) {
|
||||
|
||||
std::string half = s.substr(0, s.size() / 2);
|
||||
char middle = (s.size() % 2 == 1) ? s[s.size() / 2] : '\0';
|
||||
|
||||
std::ranges::sort(half);
|
||||
|
||||
@@ -28,11 +29,15 @@ public:
|
||||
}
|
||||
|
||||
auto it = permutations.begin();
|
||||
advance(it, k - 1);
|
||||
std::advance(it, k - 1);
|
||||
|
||||
std::string mirroredHalf = *it;
|
||||
std::ranges::reverse(mirroredHalf);
|
||||
|
||||
if (middle != '\0') {
|
||||
return *it + std::string(1, middle) + mirroredHalf;
|
||||
}
|
||||
|
||||
return *it + mirroredHalf;
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user