-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path2697-lexicographically-smallest-palindrome.rb
62 lines (50 loc) · 2.2 KB
/
2697-lexicographically-smallest-palindrome.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# frozen_string_literal: true
# 2697. Lexicographically Smallest Palindrome
# https://leetcode.com/problems/lexicographically-smallest-palindrome
# Easy
=begin
You are given a string s consisting of lowercase English letters, and you are allowed to perform operations on it. In one operation, you can replace a character in s with another lowercase English letter.
Your task is to make s a palindrome with the minimum number of operations possible. If there are multiple palindromes that can be made using the minimum number of operations, make the lexicographically smallest one.
A string a is lexicographically smaller than a string b (of the same length) if in the first position where a and b differ, string a has a letter that appears earlier in the alphabet than the corresponding letter in b.
Return the resulting palindrome string.
Example 1:
Input: s = "egcfe"
Output: "efcfe"
Explanation: The minimum number of operations to make "egcfe" a palindrome is 1, and the lexicographically smallest palindrome string we can get by modifying one character is "efcfe", by changing 'g'.
Example 2:
Input: s = "abcd"
Output: "abba"
Explanation: The minimum number of operations to make "abcd" a palindrome is 2, and the lexicographically smallest palindrome string we can get by modifying two characters is "abba".
Example 3:
Input: s = "seven"
Output: "neven"
Explanation: The minimum number of operations to make "seven" a palindrome is 1, and the lexicographically smallest palindrome string we can get by modifying one character is "neven".
Constraints:
1 <= s.length <= 1000
s consists of only lowercase English letters.
=end
# @param {String} s
# @return {String}
def make_smallest_palindrome(s)
str = s.dup
front = 0
back = str.length - 1
while front <= str.size() / 2
str[front] = [str[front], str[back]].min
str[back] = str[front]
front += 1
back -= 1
end
str
end
# **************** #
# TEST #
# **************** #
require "test/unit"
class Test_make_smallest_palindrome < Test::Unit::TestCase
def test_
assert_equal "efcfe", make_smallest_palindrome("egcfe")
assert_equal "abba", make_smallest_palindrome("abcd")
assert_equal "neven", make_smallest_palindrome("seven")
end
end