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 ...
随机推荐
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(五)之Controlling Execution
In Java, the keywords include if-else,while,do-while,for,return,break, and a selection statement cal ...
- 小说光看还不够?用Python做有声小说!
文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http:// ...
- 10行代码,用python能做出什么骚操作
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:小栗子 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...
- Java核心技术--接口与内部类
接口implement 继承接口,即履行"义务". 接口中所有的方法自动属于public,在接口声明中,不必提供关键字public 接口中决不能含有实例域,也不能在接口中实现方法 ...
- OpenAL试水
参考了https://wysaid.org/976.html. 这个博客给了一个EGE+OpenAL的demo和源代码.一开始没注意,博主也没有给EGE相关信息.会找不到EGE相关头文件,建议如果要二 ...
- 6. 浅谈super
this和super: super( ) EX6类的继承, 在react中官方固定应用 在java面向对象思想中这样定义: this表示当前对象,this()为当前对象的其他构造函数 super表示父 ...
- redis: 配置文件详解(十一)
#通用配置 bind 127.0.0.1 #绑定可访问的ip 默认本机访问,如果bind选项为空的话,那会接受所有来自于可用网络接口的连接,也可以绑定指定ip访问 protected-mode yes ...
- json:格式化数据
formatData = JSON.Stringfy(data, null, 2)
- 看完肯定懂的 Java 字符串常量池指南
字符串问题可谓是 Java 中经久不衰的问题,尤其是字符串常量池经常作为面试题出现.可即便是看似简单而又经常被提起的问题,还是有好多同学一知半解,看上去懂了,仔细分析起来却又发现不太明白. 背景说明 ...
- 不停机还能替换代码?6年的 Java程序员表示不可思议
相信很多人都有这样一种感受,自己写的代码在开发.测试环境跑的稳得一笔,可一到线上就抽风,不是缺这个就是少那个反正就是一顿报错,而线上调试代码又很麻烦,让人头疼得很.不过, 阿里巴巴出了一款名叫Arth ...