Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ab00cfd

Browse files
committed
feat: add solutions to lc problem: No.0929
No.0929.Unique Email Addresses
1 parent ad90370 commit ab00cfd

File tree

4 files changed

+200
-0
lines changed

4 files changed

+200
-0
lines changed

‎solution/0900-0999/0929.Unique Email Addresses/README.md‎

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,91 @@ func numUniqueEmails(emails []string) int {
146146
}
147147
```
148148

149+
### **JavaScript**
150+
151+
```js
152+
const numUniqueEmails2 = function (emails) {
153+
const emailFilter = function (str) {
154+
let index = str.search(/@/);
155+
let s = str.substring(0, index);
156+
let s2 = str.substring(index + 1, str.length);
157+
let res = '';
158+
for (let i = 0; i < s.length; i++) {
159+
if (s[i] === '+') break;
160+
if (s[i] === '.') continue;
161+
res = res + s[i];
162+
}
163+
return res + s2;
164+
};
165+
166+
let arr = [];
167+
for (let i = 0; i < emails.length; i++) {
168+
let t = emailFilter(emails[i]);
169+
if (arr.indexOf(t) === -1) {
170+
arr.push(t);
171+
}
172+
}
173+
return arr.length;
174+
};
175+
176+
const numUniqueEmails = function (emails) {
177+
let arr = emails.map(str => {
178+
let index = str.search(/@/);
179+
let s = str.substring(0, index);
180+
let s2 = str.substring(index + 1, str.length);
181+
let res = '';
182+
for (let i = 0; i < s.length; i++) {
183+
if (s[i] === '+') break;
184+
if (s[i] === '.') continue;
185+
res = res + s[i];
186+
}
187+
return res + s2;
188+
});
189+
let set = new Set(arr);
190+
return set.size;
191+
};
192+
```
193+
194+
### **TypeScript**
195+
196+
```ts
197+
function numUniqueEmails(emails: string[]): number {
198+
return new Set(
199+
emails
200+
.map(email => email.split('@'))
201+
.map(([start, end]) => start.replace(/\+.*|\./g, '') + '@' + end),
202+
).size;
203+
}
204+
```
205+
206+
### **Rust**
207+
208+
```rust
209+
use std::collections::HashSet;
210+
impl Solution {
211+
pub fn num_unique_emails(emails: Vec<String>) -> i32 {
212+
let mut set = HashSet::new();
213+
for email in emails.iter() {
214+
let res: Vec<&str> = email.split('@').collect();
215+
let mut s = String::new();
216+
for &c in res[0].as_bytes().iter() {
217+
if c == b'.' {
218+
continue;
219+
}
220+
if c == b'+' {
221+
break;
222+
}
223+
s.push(c as char)
224+
}
225+
s.push('@');
226+
s.push_str(res[1]);
227+
set.insert(s);
228+
}
229+
set.len() as i32
230+
}
231+
}
232+
```
233+
149234
### **...**
150235

151236
```

‎solution/0900-0999/0929.Unique Email Addresses/README_EN.md‎

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,91 @@ func numUniqueEmails(emails []string) int {
134134
}
135135
```
136136

137+
### **JavaScript**
138+
139+
```js
140+
const numUniqueEmails2 = function (emails) {
141+
const emailFilter = function (str) {
142+
let index = str.search(/@/);
143+
let s = str.substring(0, index);
144+
let s2 = str.substring(index + 1, str.length);
145+
let res = '';
146+
for (let i = 0; i < s.length; i++) {
147+
if (s[i] === '+') break;
148+
if (s[i] === '.') continue;
149+
res = res + s[i];
150+
}
151+
return res + s2;
152+
};
153+
154+
let arr = [];
155+
for (let i = 0; i < emails.length; i++) {
156+
let t = emailFilter(emails[i]);
157+
if (arr.indexOf(t) === -1) {
158+
arr.push(t);
159+
}
160+
}
161+
return arr.length;
162+
};
163+
164+
const numUniqueEmails = function (emails) {
165+
let arr = emails.map(str => {
166+
let index = str.search(/@/);
167+
let s = str.substring(0, index);
168+
let s2 = str.substring(index + 1, str.length);
169+
let res = '';
170+
for (let i = 0; i < s.length; i++) {
171+
if (s[i] === '+') break;
172+
if (s[i] === '.') continue;
173+
res = res + s[i];
174+
}
175+
return res + s2;
176+
});
177+
let set = new Set(arr);
178+
return set.size;
179+
};
180+
```
181+
182+
### **TypeScript**
183+
184+
```ts
185+
function numUniqueEmails(emails: string[]): number {
186+
return new Set(
187+
emails
188+
.map(email => email.split('@'))
189+
.map(([start, end]) => start.replace(/\+.*|\./g, '') + '@' + end),
190+
).size;
191+
}
192+
```
193+
194+
### **Rust**
195+
196+
```rust
197+
use std::collections::HashSet;
198+
impl Solution {
199+
pub fn num_unique_emails(emails: Vec<String>) -> i32 {
200+
let mut set = HashSet::new();
201+
for email in emails.iter() {
202+
let res: Vec<&str> = email.split('@').collect();
203+
let mut s = String::new();
204+
for &c in res[0].as_bytes().iter() {
205+
if c == b'.' {
206+
continue;
207+
}
208+
if c == b'+' {
209+
break;
210+
}
211+
s.push(c as char)
212+
}
213+
s.push('@');
214+
s.push_str(res[1]);
215+
set.insert(s);
216+
}
217+
set.len() as i32
218+
}
219+
}
220+
```
221+
137222
### **...**
138223

139224
```
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use std::collections::HashSet;
2+
impl Solution {
3+
pub fn num_unique_emails(emails: Vec<String>) -> i32 {
4+
let mut set = HashSet::new();
5+
for email in emails.iter() {
6+
let res: Vec<&str> = email.split('@').collect();
7+
let mut s = String::new();
8+
for &c in res[0].as_bytes().iter() {
9+
if c == b'.' {
10+
continue;
11+
}
12+
if c == b'+' {
13+
break;
14+
}
15+
s.push(c as char)
16+
}
17+
s.push('@');
18+
s.push_str(res[1]);
19+
set.insert(s);
20+
}
21+
set.len() as i32
22+
}
23+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
function numUniqueEmails(emails: string[]): number {
2+
return new Set(
3+
emails
4+
.map(email => email.split('@'))
5+
.map(([start, end]) => start.replace(/\+.*|\./g, '') + '@' + end),
6+
).size;
7+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /