LeetCodeに毎日挑戦してみた 125. Valid Palindrome(Python、Go)


Leetcodeとは

leetcode.com
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)

31問目(問題125)

125. Valid Palindrome

問題内容

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.

Note: For the purpose of this problem, we define empty string as valid palindrome.

日本語訳

文字列を指定して、英数字のみを考慮し、大文字と小文字を無視して、それが回文であるかどうかを判別します。

注: この問題の目的のために、空の文字列を有効な回文として定義します。

Example 1:

Input: "A man, a plan, a canal: Panama"
Output: true

Example 2:

Input: "race a car"
Output: false

考え方

  1. 与えられた文字列から空白を削って全て小文字の文字列にします

  2. スライスで逆から見たものと前から見たものが同じであればtrue違ければfalseです

解答コード

class Solution:
    def isPalindrome(self, s):
        s = ''.join(e for e in s if e.isalnum()).lower()
        return s==s[::-1]
  • Goでも書いてみます!
import (
    "regexp"
    "strings"
)

func isPalindrome(s string) bool {

    reg, _ := regexp.Compile("[^a-zA-Z0-9]+")
    processedString := reg.ReplaceAllString(s, "")
    processedString = strings.ToLower(processedString)
    for i := 0; i < len(processedString)/2; i++ {
        if processedString[i] != processedString[len(processedString)-1-i] {
            return false
        }
    }
    return true
}