Leetcode PHP題解--D2 929. Unique Email Addresses
929. Unique Email Addresses
題目連結
題目分析
題目要求過濾重複的郵箱地址。最終返回不重複的使用者名稱個數。
過濾規則是:郵箱名中的.
要被忽略,且+
後面的所有字元都要刪去。域名部分則不進行處理。
思路
輸入是一個數組,那麼我們用foreach
就可以了。
對於陣列中的每一個元素,進行如下處理:
-
先以
@
為分隔符拆分郵箱地址為使用者名稱部分和域名部分。
$emailStruct = explode('@', $email);
-
替換
.
為空字串。
$username = str_replace($emailStruct[0],'.',''); //下標0為使用者名稱部分,下標1為域名部分
-
刪去
+
後面的所有字元。
$usernameStruct = explode('+',$username); $username = $usernameStruct[0];
這裡用的是explode
方法。
當然,也可以用str_pos
獲取+
的位置,再用strtr
函式擷取字串。
- 把使用者名稱塞進記錄使用者名稱的數組裡面。
$replacedEmails[] = $username.$emailStruct[1];
至此,對每個郵箱地址就處理完成了。
最後,用foreach
包住以上程式碼,在foreach
外面初始化$replacedEmails
陣列,用array_unique
去重,再count
該陣列就完成了。
最終程式碼
class Solution { function numUniqueEmails($emails) { $replacedEmails = []; foreach($emails as $email){ $emailStruct = explode('@',$email); $username = str_replace($emailStruct[0],'.',''); $usernameStruct = explode('+',$username); $username = $usernameStruct[0]; $replacedEmails[] = $username.$emailStruct[1]; } return count(array_unique($replacedEmails)); } }
優化方案
- 直接把使用者名稱做為陣列的鍵值,可以省略去重步驟。
若覺得本文章對你有用,歡迎用愛發電 資助。