每周完成一个ARTS: 每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。(也就是 Algorithm、Review、Tip、Share 简称ARTS)
Algorithm
LeetCode 929.Unique Email Addresses链接解题语言 C#
题目 :
每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。
例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名。
除了小写字母,这些电子邮件还可能包含 ',' 或 '+'。
如果在电子邮件地址的本地名称部分中的某些字符之间添加句点('.'),则发往那里的邮件将会转发到本地名称中没有点的同一地址。例如,"alice.z@leetcode.com” 和 “alicez@leetcode.com” 会转发到同一电子邮件地址。 (请注意,此规则不适用于域名。)
如果在本地名称中添加加号('+'),则会忽略第一个加号后面的所有内容。这允许过滤某些电子邮件,例如 m.y+name@email.com 将转发到 my@email.com。 (同样,此规则不适用于域名。)
可以同时使用这两个规则。
给定电子邮件列表 emails,我们会向列表中的每个地址发送一封电子邮件。实际收到邮件的不同地址有多少?
示例:
输入:["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
输出:2
解释:实际收到邮件的是 "testemail@leetcode.com" 和 "testemail@lee.tcode.com"。
【 参考代码 】
public int NumUniqueEmails(string[] emails)
{
HashSet<string> ht = new HashSet<string>();//定义一个为 string类型的哈希表
for (int i = 0; i < emails.Length; i++)
{
int index1 = emails[i].IndexOf('@');//获取字符串中@索引值
string local = emails[i].Substring(0, index1);//将@之前的字符串存储起来
string rest = emails[i].Substring(index1);//将@后缀存储
if (local.Contains("+"))
{ local = local.Substring(0, local.IndexOf('+')); }//将 ‘ + ’ 后面包括+号全部去除
local = local.Replace(".", "");//替换掉无用的.
ht.Add(local + rest);//将邮箱前缀与后缀组合起来
}
return ht.Count();//返回哈希表有效元素个数,哈希表中只保存不重复项
}
Review
The Key To Accelerating Your Coding Skills(中英文对照版)链接文章是耗子叔在专栏推荐过的,不知道有多少人看下去了呢?感悟:编程并非一日之功,源于兴趣,亦成于兴趣。只要选对确的方法去努力一定能看到效果。不必超于常人,你只需和常人一般便已非凡
Tip
http://unbug.github.io/codelf/ 一个变量命名查询的网址,相信很多初学者对于变量命名感到非常苦恼这个网站可以让你的网站根据你的编程语言匹配出你想要定义的变量可用哪些合适的变量名,对于新手我觉得应该非常实用了。
share
文章链接分享的是我根据耗子叔 《 程序员练级攻略 》推荐的 C 语言的书 《 C 语言程序设计 现代方法 》第二版 一星期的笔记整理, 从 C# 回到 C 我感觉自己又多了许多收获, 很多知识盲点, 争取在这个月过完这本书。