• 929. 独特的电子邮件地址


    每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。

    例如,在 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"。
    

    提示:

    • 1 <= emails[i].length <= 100
    • 1 <= emails.length <= 100
    • 每封 emails[i] 都包含有且仅有一个 '@' 字符。

    思路:这是一道简单难度的题目,题目描述比较直观, 

        在读到‘@’ 和 ‘+’, 只要字符不等于‘ . ’  ,将读到的字符就都放到新的字符串里面

        在读到‘@’之前 ,如果读到了‘+’,那么‘+’和到‘@’之间的字符都不放入新的字符串中

        最后如果‘@’已经读到了,则‘@’和其后的字符都放入新的字符串中

        为了节省空间,新的子串直接覆盖emails[i]处的字符串

        之后还要判断新的字符串与前面的字符串是否重复,如果存在重复的则cnt--(cnt最开始等于emails中的个数),并且break出循环

        代码中 hasread表示是否读到了‘@’字符,hasread1表示是否读到了‘+’字符 。 目前beat 99%

    class Solution {
        public int numUniqueEmails(String[] emails) {
            int hasread=0;    //是否到了@符号,@后面的不用管
            int hasread1=0;
            int size=0;
            char[] ch;
            int index=0;
            int cnt = emails.length;
            for(int i=0;i<emails.length;++i){
                hasread=0;
                hasread1=0;
                index=0;
                size = emails[i].length();
                ch = new char[size];
                
               for(int j=0;j<size;++j){
                   if(emails[i].charAt(j)=='@') hasread=1;
                   if(emails[i].charAt(j)=='+') hasread1=1;
                   if(hasread==0){
                      if(hasread1==0 && emails[i].charAt(j)!='.') ch[index++]=emails[i].charAt(j); 
                    } else ch[index++]=emails[i].charAt(j);
                   
               }
                
                emails[i] = new String(ch,0,index);
                //对比前面是否有相同
                for(int k=i-1;k>=0;--k){
                    if(emails[k].equals(emails[i])) {cnt--;break;}
                }
            }
    
            return cnt;
        }
    }

    %

  • 相关阅读:
    【软件构造】Lab1基本流程指导及重难点分析
    【软件构造】关于java中List和Set数据结构不同实现方式和不同遍历方式时间效率的探讨与分析
    程序人生-Hello’s P2P
    WinterCamp2017吃饭睡觉记
    bzoj 3144 [Hnoi2013]切糕
    bzoj 1565 [NOI2009]植物大战僵尸
    bzoj 1061 [Noi2008]志愿者招募
    序列
    Philosopher
    时机成熟之时
  • 原文地址:https://www.cnblogs.com/chen-jack/p/9934502.html
Copyright © 2020-2023  润新知