929. Unique Email Addresses(python+cpp)

11339 단어 LeetCode
제목:
Every email consists of a local name and a domain name, separated by the @ sign. For example, in [email protected] , 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, "[email protected]" and "[email protected]" 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 [email protected] will be forwarded to [email protected] . (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:["[email protected]","[email protected]","[email protected]"]
Output: 2 
Explanation: "[email protected]" and "[email protected]" actually receive mails  

Note: 1 <= emails[i].length <= 100 1 <= emails.length <= 100 Each emails[i] contains exactly one '@' character.
해석: 간단한 문자열 해석 제목, 사용split()을 잘하면 된다. c++는 split()가 없고 사용istringstream으로 유사한 효과를 실현할 수 있다.python 코드:
class Solution:
    def numUniqueEmails(self, emails):
        """
        :type emails: List[str]
        :rtype: int
        """
        _set=set()
        for email in emails:
            localName,domainName=email.split('@')
            localName=localName.split('+')[0].replace('.','')
            _set.add(localName+'@'+domainName)
        return len(_set)

c++ 코드:
#include 
#include
#include
using namespace std;
class Solution {
public:
    int numUniqueEmails(vector<string>& emails) {
        set<string> _set;
        for(auto email:emails)
        {
            string new_email="";
            string word="";
            istringstream emailstream(email);
            int count=0;
            while(getline(emailstream,word,'@'))
            {
                if (count==0)
                {
                    int cnt=0;
                    istringstream localName(word);
                    string local="";
                    while(getline(localName,local,'+') && cnt==0)
                    {
                        cnt++;
                        //C++ string ,  
                        //str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());
                        //python ,c++ ...
                        local.erase(remove(local.begin(),local.end(),'.'),local.end());
                        new_email+=local;
                    }
                }
                else
                    new_email+="@"+word;
                count++;
            }
            _set.insert(new_email);
        }
        return _set.size();
    }
};

요약: C++에서string에서 모든 특정한 문자를 삭제하려면 다음과 같은 코드str.erase(std::remove(str.begin(), str.end(), 'a'), str.end());를 사용할 수 있습니다. remove() 함수는 삭제할 원소의 뒤에 있는 원소를 앞으로 이동할 뿐이고 remove() 뒤에 있는 문자열의 길이는 변하지 않으며 뒤에 있는 몇 개의 원소는 중복되기 때문에 erase() 떨어뜨려야 합니다.사용istringstream 필수#include.

좋은 웹페이지 즐겨찾기