LeetCodeのEasy問題を解いて勉強するSwift Valid Palindrome編



LeetCodeのEasy問題を解いて勉強するSwift Valid Palindrome編

新しくSwiftを触ることになりそうなので

ひとまずコードを書いてみることにする。
LeetCodeのEasy問題は比較的解き方を知っている(はず)なので、Python3で書いていた部分をどのような書き方に直すのかを色々思い出しつつ試行錯誤していく。

書いている人のレベル感

Swiftビギナー。基本的な文法すらあやふやなので始めて数日レベルと言っても過言ではない。

LeetCode

お題が与えられ、その内容に合わせてコードを書き、提出して合ってるかどうかを確認できる。
問題はソフトウェアエンジニアのコーディング面接で出されたお題をそのまま引用していることがほとんど。

前回
LeetCodeのEasy問題を解いて勉強するSwift Two Sum編


次回

LeetCodeのEasy問題を解いて勉強するSwift Valid Parentheses編

Valid Palindrome

Valid Palindrome
与えられた文字列が回文であるかを確認する関数を書く。
いわゆるTwo Pointerで解く。

最初ループ処理をrepeat while文で書いていたけどwhile文でも書けるんだっけ?となって書き直した。

そもそもrepeat while文とwhile文の違いってなんぞや?となったので調査。

repeat while

→ループ条件に関わらずループ処理を一回だけ必ず実行する『while文』」

while

→ループ条件を確認し、条件に合致した場合にのみループ処理が行われる。

class Solution {
   func isPalindrome(_ s: String) -> Bool {
       if s.isEmpty{
           return true
       }
       let StringArray = Array(s)
       var pointer_1 = 0
       var pointer_2 = s.count-1
       // 前からのポインターと後ろからのポインターで照合していく
       while pointer_1 < pointer_2 {
           // 二つともアルファベットの場合のみ称号を行い、空欄やカンマなどの記号の場合にはpointerを進める
           if !StringArray[pointer_1].isLetter, !StringArray[pointer_1].isNumber{
               pointer_1 += 1
               continue
           }

           if !StringArray[pointer_2].isLetter, !StringArray[pointer_2].isNumber{
               pointer_2 -= 1
               continue
           }

           if StringArray[pointer_1].lowercased() != StringArray[pointer_2].lowercased(){
                   return false
           }
           pointer_1 += 1
           pointer_2 -= 1
       }

       return true
   }

}

学べたこと

Swiftでの文字列が空白を確認する方法(isEmpty)
Swiftで文字列が数値、文字列、小文字アルファベットなのかを確認する方法(isNumber ,isLetter, lowercased)

repeat while文とwhile文の違い

コメント

このブログの人気の投稿

Braveブラウザの同期機能をiPhoneで設定した話。

failed: unable to get local issuer certificate (_ssl.c:1123)と出たので解決した話

自作のChrome Extensionをインポートした時に "Invalid value for 'content_scripts[0].matches[0]': Empty path."というエラーが出たので解決した