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
.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)이 문제의 공식 난이도는 Medium으로 좋아요 1296, 반대 505, 통과율 35.4%를 눌렀다.각 항목의 지표로 말하자면 보기에는 약간 규범에 맞는 것 같지만, 실제로도 확실히 그렇다.이 문제의 해법과 의도는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.