929. Unique Email Addresses#14
Conversation
| - uniqueEmails は O(N)のサイズがあればよい | ||
| - ひとつひとつのエントリはO(M) | ||
| - よって全体としてはO(NM) | ||
| - 1文字は1byteとする. emails.length <= 100, emails[i].length <= 100となっているので, |
There was a problem hiding this comment.
もう少し丁寧に書いてもいいかなと思いました。
例えば「UTF-8でエンコードすると仮定すると、 小文字の英語, '+', '.', '@' は1byteである」などです。
| - LLMより,`strings.Cut` | ||
| という関数を教えてもらったのでこれのバージョンを書いてみたが,別にわかりやすくもないような... | ||
| - https://pkg.go.dev/strings#Cut | ||
| - もっと実務的なvalidationが必要になる場合には `net/mail.ParseAddress` を利用するのがよさそう |
There was a problem hiding this comment.
言及されているように、今の制約ならどうか、その制約が変わったらどうかを考えるのは大事だと思います。
実務的なvalidationが必要になる場合
これでいうと、以下のようなものが背景知識になるかと思います。
・現実のメールを構成する文字の種類はもっと多い。(RFC5321など)
・ただし、RFCに忠実に従おうとすると、メールアドレスのバリデーションは複雑になる(https://www.regular-expressions.info/email.html)
・(場合によっては、バリデーションはステートマシンで書いたほうがシンプルにわかりやすくなるなるかもしれません。)
ご覧になっていなければ、コメント集を見るのもよいと思います。
There was a problem hiding this comment.
コメント集を確認できてなかったので確認します
ありがとうございます!
There was a problem hiding this comment.
みました.
ステートマシン
エラー処理をどうするかについてのやりとり(どんなユースケースを想定しているか)
コピーをするかどうかの選択
言及されているあたりを思い浮かべながら,それを伝える訓練としてPRを作れるとよさそうですね
(返信不要です)
| uniqueEmails := map[string]bool{} | ||
| for _, email := range emails { | ||
| splited := strings.Split(email, "@") | ||
| localname, domain := splited[0], splited[1] |
There was a problem hiding this comment.
問題文中で local name と domain name となっているにもかかわらず、 localname と domain と name が付いているのといないのとで統一されていない点に違和感を感じました。どちらかに統一するとよいと思います。
There was a problem hiding this comment.
たしかに,統一感のない命名でした.ご指摘ありがとうございます
| uniqueEmails := map[string]bool{} | ||
| for _, email := range emails { | ||
| splited := strings.Split(email, "@") | ||
| localname, domain := splited[0], splited[1] |
There was a problem hiding this comment.
こちらもGoの慣習から外れた命名でした.ご指摘ありがとうございます
https://leetcode.com/problems/unique-email-addresses/