Skip to content

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

+85
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

+85
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
```
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+
}
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)