From b8c2a2e5cd041a7a076e62d0def7760ac1e57e3c Mon Sep 17 00:00:00 2001 From: Jason Staten Date: Tue, 11 Oct 2022 16:33:21 -0600 Subject: [PATCH] break palindrome --- breakpalindrome/breakpalindrome.go | 27 +++++++++++++++++++++ breakpalindrome/breakpalindrome_test.go | 24 +++++++++++++++++++ breakpalindrome/readme.md | 31 +++++++++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 breakpalindrome/breakpalindrome.go create mode 100644 breakpalindrome/breakpalindrome_test.go create mode 100644 breakpalindrome/readme.md diff --git a/breakpalindrome/breakpalindrome.go b/breakpalindrome/breakpalindrome.go new file mode 100644 index 0000000..8e56661 --- /dev/null +++ b/breakpalindrome/breakpalindrome.go @@ -0,0 +1,27 @@ +package breakpalindrome + +func breakPalindrome(palindrome string) string { + if len(palindrome) <= 1 { + return "" + } + result := []rune(palindrome) + + for i, r := range result { + if r != 'a' { + result[i] = 'a' + break + } + } + + for _, r := range result { + if r != 'a' { + return string(result) + } + } + + return palindrome[:len(palindrome)-1] + "b" +} + +func Break(palindrome string) string { + return breakPalindrome(palindrome) +} diff --git a/breakpalindrome/breakpalindrome_test.go b/breakpalindrome/breakpalindrome_test.go new file mode 100644 index 0000000..6146b6a --- /dev/null +++ b/breakpalindrome/breakpalindrome_test.go @@ -0,0 +1,24 @@ +package breakpalindrome_test + +import ( + "testing" + + bp "git.jxs.me/leetgo/breakpalindrome" + "github.com/stretchr/testify/require" +) + +func TestEmpty(t *testing.T) { + require.Equal(t, "", bp.Break("")) +} + +func TestSingle(t *testing.T) { + require.Equal(t, "", bp.Break("a")) +} + +func TestShort(t *testing.T) { + require.Equal(t, "aaccba", bp.Break("abccba")) +} + +func TestAllA(t *testing.T) { + require.Equal(t, "aaaab", bp.Break("aaaaa")) +} diff --git a/breakpalindrome/readme.md b/breakpalindrome/readme.md new file mode 100644 index 0000000..ec24a2b --- /dev/null +++ b/breakpalindrome/readme.md @@ -0,0 +1,31 @@ +1328. Break a Palindrome +Medium + +Given a palindromic string of lowercase English letters palindrome, replace exactly one character with any lowercase English letter so that the resulting string is not a palindrome and that it is the lexicographically smallest one possible. + +Return the resulting string. If there is no way to replace a character to make it not a palindrome, return an empty string. + +A string a is lexicographically smaller than a string b (of the same length) if in the first position where a and b differ, a has a character strictly smaller than the corresponding character in b. For example, "abcc" is lexicographically smaller than "abcd" because the first position they differ is at the fourth character, and 'c' is smaller than 'd'. + + + +Example 1: + +Input: palindrome = "abccba" +Output: "aaccba" +Explanation: There are many ways to make "abccba" not a palindrome, such as "zbccba", "aaccba", and "abacba". +Of all the ways, "aaccba" is the lexicographically smallest. + +Example 2: + +Input: palindrome = "a" +Output: "" +Explanation: There is no way to replace a single character to make "a" not a palindrome, so return an empty string. + + + +Constraints: + + 1 <= palindrome.length <= 1000 + palindrome consists of only lowercase English letters. +