😅

LeetCodeで簡単な問題に挑戦してみた

2024/05/06に公開

算数の文章みたいだ

アルゴリズムについて最近学んでいるのですが、中々理解が進まない💦
LeetCodeをやると良いと友達からアドバイスを受けて一番簡単な問題に挑戦してみました。

  1. Check if a String Is an Acronym of Words
    Easy
    Topics
    Companies
    Hint
    Given an array of strings words and a string s, determine if s is an acronym of words.

The string s is considered an acronym of words if it can be formed by concatenating the first character of each string in words in order. For example, "ab" can be formed from ["apple", "banana"], but it can't be formed from ["bear", "aardvark"].

Return true if s is an acronym of words, and false otherwise.

Example 1:

Input: words = ["alice","bob","charlie"], s = "abc"
Output: true
Explanation: The first character in the words "alice", "bob", and "charlie" are 'a', 'b', and 'c', respectively. Hence, s = "abc" is the acronym.

入力: 単語 = ["アリス","ボブ","チャーリー"], s = "abc"
出力: true
説明: 「alice」、「bob」、「charlie」という単語の最初の文字は、それぞれ「a」、「b」、「c」です。したがって、s = "abc" は頭字語です。

やるべきこと

words = ["alice","bob","charlie"] と s = "abc" を比較して期待する値と同じtrueになればOK
どうすればいいのか...

JavaScriptの場合

wordsの中から先頭の文字だけ取得して、連結すれば"abc"になる。mapで展開して、e[0]とすれば先頭の文字を取得できた。配列は、join('')で結合することができる。

/**
 * @param {string[]} words
 * @param {string} s
 * @return {boolean}
 */
var isAcronym = function(words, s) {
    let t = words.map((e) => {
        return e[0];
    });
    return t.join('') === s
};

Dartの場合

同じようにやるとできた。Listには、.toList()が必要なのでお忘れなく。比較する演算子も異なる。Dartにもjoin('')があり結合するときに使う。

class Solution {
  bool isAcronym(List<String> words, String s) {
    final t = words.map((e) => e[0]).toList();
    return t.join('') == s;
  }
}

Swiftの場合

Swiftは癖があった。文字は[0]でインデックスを参照できないようだ???
startIndexを使って参照する。先頭の文字を取り出して結合するときは、joinedを使う。
https://developer.apple.com/documentation/swift/string/startindex
https://developer.apple.com/documentation/swift/array/joined()

class Solution {
    func isAcronym(_ words: [String], _ s: String) -> Bool {
        var t = words.map({ e in
            return String(e[e.startIndex])
        })
        var z = t.joined()
        return z == s
    }
}

最後に

文字を比較して正しいか間違っているかやるだけなのですが、配列を操作して結合するのは、調べないとわからなかったですね。インデックスの値を取得して結合して演算子で比較することはロジックの勉強になりました。
アルゴリズムについて勉強したい人は、LeetCodeやってみてね💙💚

https://leetcode.com/

Discussion