diff --git a/pkg/valid_palindrome/main.go b/pkg/valid_palindrome/main.go new file mode 100644 index 0000000..5f9e6b4 --- /dev/null +++ b/pkg/valid_palindrome/main.go @@ -0,0 +1,30 @@ +package valid_palindrome + +import ( + "regexp" + "strings" +) + +var notAlphanumeric = regexp.MustCompile(`[^a-zA-Z0-9]`) + +func KeepAlphanumeric(text string) string { + return notAlphanumeric.ReplaceAllString(text, "") +} + +func IsPalindrome(text string) bool { + scrubbed := strings.ToLower(KeepAlphanumeric(text)) + + start := 0 + end := len(scrubbed) - 1 + + for start < end { + if scrubbed[start] != scrubbed[end] { + return false + } + + start++ + end-- + } + + return true +} diff --git a/pkg/valid_palindrome/main_test.go b/pkg/valid_palindrome/main_test.go new file mode 100644 index 0000000..073cbd8 --- /dev/null +++ b/pkg/valid_palindrome/main_test.go @@ -0,0 +1,14 @@ +package valid_palindrome_test + +import ( + "testing" + + "git.maximhutz.com/practice/pkg/valid_palindrome" + "github.com/stretchr/testify/assert" +) + +func TestTwoSum(t *testing.T) { + assert.Equal(t, true, valid_palindrome.IsPalindrome("A man, a plan, a canal: Panama")) + assert.Equal(t, false, valid_palindrome.IsPalindrome("race a car")) + assert.Equal(t, true, valid_palindrome.IsPalindrome(" ")) +}