LeetCode #929 UniqueEmailAddresses. Algorithm,알고리즘,LeetCode,Codefights,CodeSignal,코드파이트,코드시그널,예제,그래프,Graph,example,c++,java,재귀,recursive,datastructure,techinterview,coding,코딩인터뷰,기술면접, 데이터베이스, sql, query, 쿼리
Runtime: 32 ms, faster than 78.13% of C++ online submissions for Unique Email Addresses.
Memory Usage: 14.3 MB, less than 21.43% of C++ online submissions for Unique Email Addresses.
LeetCode #929
Q.
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.
모든 이메일은 로컬네임과 도메인네임으로 이루어져 있고 @ 으로 나뉘는 부분이 있다.
예를들면, alice@leetcode.com 에서, alice 는 로컬네임이고, leetcode.com 은 도메인네임이다.
소문자 뿐만 아니라, 이메일에는 '.' 과 '+' 도 있다.
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.)
로컬네임에서 만약 글자들 사이에 '.' 이 있다면, 로컬네임에서 점이 없는 메일과 똑같은 곳으로 메일이 간다.
예를들면, "alice.z@leetcode.com" 과, "alicez@leetcode.com" 은 똑같은 메일로 보내진다. (도메인네임에는 적용되지 않는다)
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.
로컬네임에서 '+' 가 들어가면, 첫번째 + 사인 이후의 글자들은 전부 무시된다. 이건 특정 메일들이 걸러지도록 한다. 예를들면, m.y+name@email.com 은 my@email.com 으로 보내지게 된다. (이것도 도메인네임에는 적용되지 않는 룰이다.)
두개의 룰 모두 동시에 적용될 수 있다.
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.
Example 1:
Input: nums = [5,2,3,1]
Output: [1,2,3,5]
Example 2:
Input: nums = [5,1,1,2,0,0]
Output: [0,0,1,1,2,5]
Constraints:
- 1 <= nums.length <= 50000
- -50000 <= nums[i] <= 50000
Process
// Process
//1. Input email list
//2. Iterate all list
// 2.1. Divide email into localName and domainName
// 2.2. If localName has '+',
// 2.2.1. Substring front of '+'
// 2.3. If localName has '.'
// 2.3.1. Erase all '.'
// 2.4. Put localName + domainName to map as key
//3. Return map size
// 처리과정
//1. 이메일 리스트를 입력받는다.
//2. 리스트 전체를 반복한다.
// 2.1. 로컬네임과 도메인네임을 분리한다.
// 2.2. 로컬네임에서 '+' 가 있으면,
// 2.2.1. '+' 앞부분까지만 떼어낸다.
// 2.3. 로컬네임에서 '.' 가 있으면,
// 2.3.1. '.' 을 전부 지운다.
// 2.4. 로컬네임과 도메인네임 합쳐서 맵에 키로 넣는다.
//3. 맵 개수 반환한다.
Code.. lemme see example code!!!
코드.. 예제코드를 보자!!!
class Solution {
public:
int numUniqueEmails(vector<string>& emails) {
map<string, int> buffMap;
for (int i = 0; i < emails.size(); ++i) {
string mail = emails.at(i);
size_t atPos = mail.find('@');
string localName = mail.substr(0, atPos);
string domain = mail.substr(atPos, mail.size());
// cout << localName << " " << domain << endl;
int index = localName.find('+');
localName = localName.substr(0, index);
for (int j = 0; j < localName.size(); ++j) {
if (localName[j] == '.') {
localName.erase(localName.begin() + j--);
}
}
buffMap.insert(make_pair(localName + domain, 1));
}
return buffMap.size();
}
};
Something else you might like...?