zoukankan      html  css  js  c++  java
  • 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;
        }
    }

    %

  • 相关阅读:
    Infopath Notify 弹出提示信息
    window.showModalDialog 返回值
    【转】获得正文内容中的所有img标签的图片路径
    Json Datable Convert
    Sharepoint 列表 附件 小功能
    Surgey 权限更改
    SQL 触发器用于IP记录转换
    Caml语句 查询分配给当前用户及当前组
    jquery 1.3.2 auto referenced when new web application in VSTS2010(DEV10)
    TFS diff/merge configuration
  • 原文地址:https://www.cnblogs.com/chen-jack/p/9934502.html
Copyright © 2011-2022 走看看