LeetCodeで簡単な問題に挑戦してみた
算数の文章みたいだ
アルゴリズムについて最近学んでいるのですが、中々理解が進まない💦
LeetCodeをやると良いと友達からアドバイスを受けて一番簡単な問題に挑戦してみました。
- 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を使う。
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やってみてね💙💚
Discussion