Leetcode Note: Go - Valid Palindrome
Valid Palindrome - LeetCode
https://leetcode.com/problems/valid-palindrome/
- Go 言語で取り組んだメモ
所感
- 文字データを取り出して比較する感じになりそう
回答
Go solution with comments - LeetCode Discuss
https://leetcode.com/problems/valid-palindrome/discuss/1571282/Go-solution-with-comments
func isPalindrome(s string) bool {
left, right := 0, len(s) - 1
for left < right {
l := rune(s[left])
r := rune(s[right])
// if char at left if not a letter or digit increment the left pointer
if !unicode.IsLetter(l) && !unicode.IsDigit(l) {
left++
} else if !unicode.IsLetter(r) && !unicode.IsNumber(r) { // if char at right if not a letter or digit decrement the right pointer
right--
} else if unicode.ToLower(l) == unicode.ToLower(r) { // if both are same chars increment left pointer and decrement right pointer
left++
right--
} else { // if none of the above conditions are satisified this is not a palindrome
return false
}
}
return true
}
- init
- left を 0 で初期化
- right を len(s) - 1 で初期化
- left < right 条件でループ
- l が IsLetter でも IsDigit でもなければ left++
- r が IsLetter でも IsDigit でもなければ right–
- l と r を ToLower した結果が等価なら left++, right–
- どれでもなければ Palindrome として成立しないもの判定して return false
- ループを経過したら return true