LeetCode--Unique Email Addresses & Hamming Distance (Easy)
929. Unique Email Addresses (Easy)#
Every email consists of a local name and a domain name, separated by the @ sign.
For example, in alice@leetcode.com, alice is the local name, and leetcode.com is the domain name.
Besides lowercase letters, these emails may contain '.'s or '+'s.
If you add periods ('.') between some characters in the local name part of an email address, mail sent there will be forwarded to the same address without dots in the local name. For example, "alice.z@leetcode.com" and "alicez@leetcode.com" forward to the same email address. (Note that this rule does not apply for domain names.)
If you add a plus ('+') in the local name, everything after the first plus sign will be ignored. This allows certain emails to be filtered, for example m.y+name@email.com will be forwarded to my@email.com. (Again, this rule does not apply for domain names.)
It is possible to use both of these rules at the same time.
Given a list of emails, we send one email to each address in the list. How many different addresses actually receive mails?
Example 1:
Input: ["test.email+alex@leetcode.com","test.e.mail+bob.cathy@leetcode.com","testemail+david@lee.tcode.com"]
Output: 2
Explanation: "testemail@leetcode.com" and "testemail@lee.tcode.com" actually receive mails
Note:
1 <= emails[i].length <= 100
1 <= emails.length <= 100
Each emails[i] contains exactly one '@' character.
All local and domain names are non-empty.
Local names do not start with a '+' character.
solution##
我的解法,较慢
class Solution {
public int numUniqueEmails(String[] emails) {
Set<String> set = new HashSet<String>();
for (String email : emails)
{
String local;
int plus = email.indexOf('+'); //记录'+'号位置
int at = email.indexOf('@'); //记录'@'号位置
if (plus == -1) //local name 里面不存在'+'号
local = email.substring(0,at).replace(".","");
else //local name 里面存在'+'号
local = email.substring(0,plus).replace(".",""); //注意,此处一定要用空字符串""代替,折腾我半天,头疼!!!
String domain = email.substring(at);
set.add(local+domain);
}
return set.size();
}
}
官方解法,还没我的解法快!改正错误后如下
class Solution {
public int numUniqueEmails(String[] emails) {
Set<String> seen = new HashSet();
for (String email: emails) {
int i = email.indexOf('@');
String local = email.substring(0, i);
String rest = email.substring(i);
if (local.contains("+")) {
local = local.substring(0, local.indexOf('+'));
}
local = local.replace(".","");
seen.add(local + rest);
}
return seen.size();
}
}
总结##
此题看起来很简单,但是有些细节很折腾人!思路是取一个邮箱地址,然后用indexOf('+')找到‘+’号的位置plus,用indexOf('@')找到‘@’号的位置at。再判断plus是否为-1,若是,则表明local name中没有‘+’号,则直接用substring(0,at)得到local,再调用replace(".","")方法得到去掉‘.’号的local字符串;若否,则表明local中有‘+’号,则直接用substring(0,plus)得到local,再按照上面的方法去掉‘.’号。随后调用substring(at)得到domain,最后将local与domain拼接后放入set集合。结束时,返回set集合的大小即可。
Notes:
1.此题细节较多,需要小心;
2.将字符替换为空字符,调用replace()方法时,必须这样使用,string.replace(".",""),不知道还有没有更好的方法;
3.这种类型的题尽量调用java自带方法;
461. Hamming Distance (Easy)#
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x and y, calculate the Hamming distance.
Note:
0 ≤ x, y < 231.
Example:
Input: x = 1, y = 4
Output: 2
Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
The above arrows point to positions where the corresponding bits are different.
solution##
我的解法
class Solution {
public int hammingDistance(int x, int y) {
int count = 0;
int bitxor = x^y; //异或运算直接将两个二进制数中位不同的变为1
while (bitxor > 0)
{
if (bitxor % 2 == 1)
count++;
bitxor = bitxor >> 1; //移位运算,相当于bitxor / 2
}
return count;
}
}
目前最简单的解法
class Solution {
public int hammingDistance(int x, int y) {
return Integer.bitCount(x ^ y);
}
}
总结##
此题思路较多。
第一种可以采用常规解法,先将两个整数转换为二进制数,然后统计对应位置不同的二进制位的个数即可;
第二种解法是直接调用java自带的方法,Integer.bitCount()即可;
第三种解法是先对两个整数进行异或运算,将对应二进制位不同的变为1,转换成整数即为bitxor,然后用循环除法得到每一位二进制位,统计其中1的个数即可。
Notes:
1.学会灵活使用位运算,<<左移,>>右移,^异或;
2.对两个整数进行位运算后,得到的新结果依然是整数;
3.位运算这块得好好学习下!!!!!!!!
LeetCode--Unique Email Addresses & Hamming Distance (Easy)的更多相关文章
- LeetCode - Unique Email Addresses
Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...
- [leetcode] 929. Unique Email Addresses (easy)
统计有几种邮箱地址. 邮箱名类型:local@domain 规则:1. local中出现"."的,忽略. a.bc=abc 2. local中出现"+"的,+以 ...
- 929. Unique Email Addresses
929. Unique Email Addresses Easy 22766FavoriteShare Every email consists of a local name and a domai ...
- 【Leetcode_easy】929. Unique Email Addresses
problem 929. Unique Email Addresses solution: class Solution { public: int numUniqueEmails(vector< ...
- 【LeetCode】477. Total Hamming Distance 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 位运算 日期 题目地址:https://leetco ...
- [LeetCode&Python] Problem 461. Hamming Distance
The Hamming distance between two integers is the number of positions at which the corresponding bits ...
- [LeetCode] 929. Unique Email Addresses 唯一的电邮地址
Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...
- LeetCode 929.Unique Email Addresses
Description Every email consists of a local name and a domain name, separated by the @ sign. For exa ...
- LeetCode 929 Unique Email Addresses 解题报告
题目要求 Every email consists of a local name and a domain name, separated by the @ sign. For example, i ...
随机推荐
- [题解]P1449 后缀表达式(栈)
题目链接:P1449 后缀表达式 题目描述: 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优 ...
- JUC并发编程基石AQS源码之结构篇
前言 AQS(AbstractQueuedSynchronizer)算是JUC包中最重要的一个类了,如果你想了解JUC提供的并发编程工具类的代码逻辑,这个类绝对是你绕不过的.我相信如果你是第一次看AQ ...
- C++常用注意事项
new和delete:现在还没有new[][]和delete[][],所以在用这些的时候最好用循环解决,先一个指针的数组,然后再初始化,每个元素再new一下,这样就满足了多维数组的条件:比如: int ...
- Docker 搭建 ELK 集群步骤
前言 本篇文章主要介绍在两台机器上使用 Docker 搭建 ELK. 正文 环境 CentOS 7.7 系统 Docker version 19.03.8 docker-compose version ...
- redis的5种数据类型
卸载服务:redis-server --service-uninstall 开启服务:redis-server --service-start 停止服务:redis-server --service- ...
- centos7与8的区别
1.关于内核版本:RHEL8采用4.18.0-xRHEL7采用3.10-0-x 2 网络时间同步 RHEL8 只使用Chronyd,不支持NTP部署. RHEL7Chronyd与NTP两者都支持 3. ...
- ReportEventA 错误 ERROR_CRC
如果 level 的宏弄错了,就会出现这种奇怪的现象.
- git取消跟踪(unversion)
有时候我们会git add了一些不想跟踪的文件,通过下面的命令可以在没提交前从index里删掉跟踪记录(保留本地文件) git rm –cached 文件名
- java并发Exchanger的使用
目录 简介 类定义 类继承 构造函数 两个主要方法 具体的例子 结语 简介 Exchanger是java 5引入的并发类,Exchanger顾名思义就是用来做交换的.这里主要是两个线程之间交换持有的对 ...
- java之 向上转型与向下转型
向上转型 class father { public void eat(){ System.out.println("father eat()"); } } class son e ...