LeetCode第929题,难度简单。三个半月之前的题目了,最近只能够选择周末做题,然后一次性把一周的题目都写完,然后每天回家定时发送
原题地址:https://leetcode-cn.com/problems/unique-email-addresses/
题目描述:
简单阐述下本题的一个题目概要:
给你一个字符串数组,每个字符串都是一个邮件地址,然后每个邮件地址里面都可能会有'.'
或 '+'
。邮件地址分为两部分,'@'前面的叫做本地名称,后面的称为域名。
如果本地名称包含'.',则该地址还是会发往没有去掉点'.'的那个地址。
如果本地名称包含'+',则'+'后面的内容将会被忽略。
题目有以下三个条件
解题思路:
这题其实挺简单的,题目很简单,但是代码写起来会有点长。
首先遍历所有的邮件列表,每个邮件地址的每个字符都遍历过去,判断其中的符号,即加号'+', 艾特'@', 点号'.',根据规则,分别对这三个符号做特殊处理。@之前的就是前缀,之后的就是后缀,一个前缀可以对应多个后缀。
最后统计每个前缀对应的后缀数量,就可以了。
中文官网题解:
https://leetcode-cn.com/problems/unique-email-addresses/solution/
个人题解:
class Solution {
public int numUniqueEmails(String[] emails) {
Map<String, Set<String>> map = new HashMap<>();
for (String email : emails) {
char[] chars = email.toCharArray();
StringBuilder stringBuilder = new StringBuilder();
boolean plus = false;
for (int i = 0; i < chars.length; i++) {
if (plus && chars[i] != '@') {
continue;
}
if (chars[i] == '.') {
continue;
}
if (chars[i] == '+') {
if (plus) {
continue;
} else {
plus = true;
continue;
}
}
if (chars[i] == '@') {
Set<String> list = map.get(stringBuilder.toString());
if (list == null) {
list = new HashSet<>();
}
list.add(email.substring(i + 1));
map.put(stringBuilder.toString(), list);
break;
}
stringBuilder.append(chars[i]);
}
}
int count = 0;
for (Map.Entry<String, Set<String>> entry : map.entrySet()) {
count += entry.getValue().size();
}
return count;
}
}
结果:
运行结果还可以,虽然不是最快,但也差不多了。鼓掌
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有