ゼロから始めるLeetCode Day68 「709. To Lower Case」

概要

海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインである。

どうやら多くのエンジニアはその対策としてLeetCodeなるサイトで対策を行うようだ。

早い話が本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトであり、海外のテックカンパニーでのキャリアを積みたい方にとっては避けては通れない道である。

と、仰々しく書いてみましたが、私は今のところそういった面接を受ける予定はありません。

ただ、ITエンジニアとして人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていこうかと思います。

Leetcode

Python3で解いています。

ゼロから始めるLeetCode 目次

前回
ゼロから始めるLeetCode Day67 「1486. XOR Operation in an Array」

次回
ゼロから始めるLeetCode Day69 「279. Perfect Squares」

Twitterやってます。

問題

709. To Lower Case
問題としては文字列パラメータ str を持ち、同じ文字列を小文字で返す関数 ToLowerCase() を実装する、という問題です。

Example 1:

Input: “Hello”
Output: “hello”

Example 2:

Input: “here”
Output: “here”

Example 3:

Input: “LOVELY”
Output: “lovely”

解法

class Solution:
    def toLowerCase(self, str: str) -> str:
        return str.lower()
# Runtime: 24 ms, faster than 91.12% of Python3 online submissions for To Lower Case.
# Memory Usage: 14 MB, less than 15.17% of Python3 online submissions for To Lower Case.

lowerを知っている人ならばこう書けば良いと思いますが、知らない上に調べる環境がない、もしくは組み込み関数を使わないで解いて、と実際の面接でパッと出されたらどうでしょう。

そういった状況も考えてみるとEasyですが意外と頭を使いそうです。

僕がパッと思い浮かんだのは辞書で管理するやり方です。keyに大文字、valueに小文字を格納し、for文で回して仮にkeyに該当する要素があればvalueの該当する要素へと変える、というものですね。
ただ、もう一つ思い浮かんだものとしてUnicode変換を使ったものができるのかも、と思い今回はそちらを実装しました。

class Solution:
    def toLowerCase(self, str: str) -> str:
        ans = ''
        for s in str:
            if ord(s) >=  ord('A') and ord(s) <= ord('Z'):
                ans +=chr(ord(s) - (ord('A') - ord('a')))
            else:
                ans += s
        return ans
# Runtime: 28 ms, faster than 71.56% of Python3 online submissions for To Lower Case.
# Memory Usage: 13.8 MB, less than 69.29% of Python3 online submissions for To Lower Case.

ord関数を使って一旦UnicodeのUnicodeポイントへと変換し、比較します。
仮にそちらの値が範囲内であればUnicodeポイント分引き算をしてあげて、最終的にchr関数を使って文字列に直し、ansに代入。それ以外の場合は元々小文字なのでそのまま代入してあげれば大丈夫、という考え方です。

なお、補足のために貼っておきますが、Unicodeの一覧は以下のものとなります。
Unicode一覧 0000-0FFF

なかなか普段だったら考えない視点から考えられたのでとても面白かったです。
では今回はここまで。お疲れ様でした。

コメント

このブログの人気の投稿

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

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

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