ゼロから始めるLeetCode Day1 「2703. Return Length of Arguments Passed」
概要
海外ではエンジニアの面接においてコーディングテストというものが行われるらしく、多くの場合、特定の関数やクラスをお題に沿って実装するという物がメインでだそうです。
その対策としてLeetCodeなるサイトで対策を行うようです。
※LeetCodeとは
本場でも行われているようなコーディングテストに耐えうるようなアルゴリズム力を鍛えるサイトです。
せっかくだし人並みのアルゴリズム力くらいは持っておいた方がいいだろうということで不定期に問題を解いてその時に考えたやり方をメモ的に書いていきます。
未経験のエンジニアなので、基本的に簡単なもの(easyでacceptanceが高い順)から解いていきます。
問題
2703. Return Length of Arguments Passed
問題としては、
文字列sが与えられ、文字列のスコアとして、隣接する文字のASCII値の絶対差の合計を計算し、
最後に文字列のスコアを返すものです。
Example 1:
Input: args = [5]
Output: 1
Explanation:
argumentsLength(5); // 1
One value was passed to the function so it should return 1.
Example 2:
Input: args = [{}, null, "3"]
Output: 3
Explanation:
argumentsLength({}, null, "3"); // 3
Three values were passed to the function so it should return 3.
Constraints:
args is a valid JSON array
0 <= args.length <= 100
回答
class Solution:
def scoreOfString(self, s: str) -> int:
score = 0
for i in range (len(s) - 1):
score += abs(ord(s[i]) - ord(s[i + 1]))
return score
1. 初期化とループ準備
スコアを格納するための変数 score
を 0
で初期化します。
その後、文字列 s
の最後まで順番に処理するための for
ループを設定します。
ループのインデックス i
は、隣り合う文字のペアにアクセスするために使用します。
2. 隣接文字のスコア計算
ループの中で、現在の文字 s[i]
とその次の文字 s[i+1]
のASCIIコードを取得します。
ord()
関数を使ってそれぞれの文字のASCIIコードを取得し、それらの差の絶対値を計算します。
この絶対値が、隣り合う2つの文字のスコアとなります。
3. スコアの累積と返却
ステップ2で計算された隣接する文字ペアのスコアを、変数 score
に加算していきます。
ループが文字列の最後まで続いた後、最終的に計算された score
の値が関数の結果として返されます。
この score
が、文字列全体のスコアです。
ord() : 文字のUnicodeコードポイントを整数で返す組み込み関数です。
abs() : 絶対値に変換する組み込み関数です。
Discussion