Skip to content

Commit 9e7fb59

Browse files
committed
feat: add solutions to lc problem: No.0831
No.0831.Masking Personal Information
1 parent b4b0c24 commit 9e7fb59

File tree

6 files changed

+240
-2
lines changed

6 files changed

+240
-2
lines changed

solution/0800-0899/0831.Masking Personal Information/README.md

+87-1
Original file line numberDiff line numberDiff line change
@@ -121,22 +121,108 @@
121121

122122
<!-- 这里可写通用的实现逻辑 -->
123123

124+
**方法一:模拟**
125+
126+
根据题目描述,我们可以先判断字符串 $s$ 是电子邮件还是电话号码,然后分别处理。
127+
128+
时间复杂度为 $O(n)$,空间复杂度为 $O(n)$。其中 $n$ 为字符串 $s$ 的长度。
129+
124130
<!-- tabs:start -->
125131

126132
### **Python3**
127133

128134
<!-- 这里可写当前语言的特殊实现逻辑 -->
129135

130136
```python
131-
137+
class Solution:
138+
def maskPII(self, s: str) -> str:
139+
if s[0].isalpha():
140+
s = s.lower()
141+
return s[0] + '*****' + s[s.find('@') - 1:]
142+
s = ''.join(c for c in s if c.isdigit())
143+
cnt = len(s) - 10
144+
suf = '***-***-' + s[-4:]
145+
return suf if cnt == 0 else f'+{"*" * cnt}-{suf}'
132146
```
133147

134148
### **Java**
135149

136150
<!-- 这里可写当前语言的特殊实现逻辑 -->
137151

138152
```java
153+
class Solution {
154+
public String maskPII(String s) {
155+
if (Character.isLetter(s.charAt(0))) {
156+
s = s.toLowerCase();
157+
int i = s.indexOf('@');
158+
return s.substring(0, 1) + "*****" + s.substring(i - 1);
159+
}
160+
StringBuilder sb = new StringBuilder();
161+
for (char c : s.toCharArray()) {
162+
if (Character.isDigit(c)) {
163+
sb.append(c);
164+
}
165+
}
166+
s = sb.toString();
167+
int cnt = s.length() - 10;
168+
String suf = "***-***-" + s.substring(s.length() - 4);
169+
return cnt == 0 ? suf : "+" + "*".repeat(cnt) + "-" + suf;
170+
}
171+
}
172+
```
173+
174+
### **C++**
175+
176+
```cpp
177+
class Solution {
178+
public:
179+
string maskPII(string s) {
180+
int i = s.find('@');
181+
if (i != -1) {
182+
string ans;
183+
ans += tolower(s[0]);
184+
ans += "*****";
185+
for (int j = i - 1; j < s.size(); ++j) {
186+
ans += tolower(s[j]);
187+
}
188+
return ans;
189+
}
190+
string t;
191+
for (char c : s) {
192+
if (isdigit(c)) {
193+
t += c;
194+
}
195+
}
196+
int cnt = t.size() - 10;
197+
string suf = "***-***-" + t.substr(t.size() - 4);
198+
return cnt == 0 ? suf : "+" + string(cnt, '*') + "-" + suf;
199+
}
200+
};
201+
```
139202
203+
### **Go**
204+
205+
```go
206+
func maskPII(s string) string {
207+
i := strings.Index(s, "@")
208+
if i != -1 {
209+
s = strings.ToLower(s)
210+
return s[0:1] + "*****" + s[i-1:]
211+
}
212+
t := []rune{}
213+
for _, c := range s {
214+
if c >= '0' && c <= '9' {
215+
t = append(t, c)
216+
}
217+
}
218+
s = string(t)
219+
cnt := len(s) - 10
220+
suf := "***-***-" + s[len(s)-4:]
221+
if cnt == 0 {
222+
return suf
223+
}
224+
return "+" + strings.Repeat("*", cnt) + "-" + suf
225+
}
140226
```
141227

142228
### **...**

solution/0800-0899/0831.Masking Personal Information/README_EN.md

+81-1
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,93 @@ Thus, the resulting masked number is &quot;***-***-7890&quot;.
105105
### **Python3**
106106

107107
```python
108-
108+
class Solution:
109+
def maskPII(self, s: str) -> str:
110+
if s[0].isalpha():
111+
s = s.lower()
112+
return s[0] + '*****' + s[s.find('@') - 1:]
113+
s = ''.join(c for c in s if c.isdigit())
114+
cnt = len(s) - 10
115+
suf = '***-***-' + s[-4:]
116+
return suf if cnt == 0 else f'+{"*" * cnt}-{suf}'
109117
```
110118

111119
### **Java**
112120

113121
```java
122+
class Solution {
123+
public String maskPII(String s) {
124+
if (Character.isLetter(s.charAt(0))) {
125+
s = s.toLowerCase();
126+
int i = s.indexOf('@');
127+
return s.substring(0, 1) + "*****" + s.substring(i - 1);
128+
}
129+
StringBuilder sb = new StringBuilder();
130+
for (char c : s.toCharArray()) {
131+
if (Character.isDigit(c)) {
132+
sb.append(c);
133+
}
134+
}
135+
s = sb.toString();
136+
int cnt = s.length() - 10;
137+
String suf = "***-***-" + s.substring(s.length() - 4);
138+
return cnt == 0 ? suf : "+" + "*".repeat(cnt) + "-" + suf;
139+
}
140+
}
141+
```
142+
143+
### **C++**
144+
145+
```cpp
146+
class Solution {
147+
public:
148+
string maskPII(string s) {
149+
int i = s.find('@');
150+
if (i != -1) {
151+
string ans;
152+
ans += tolower(s[0]);
153+
ans += "*****";
154+
for (int j = i - 1; j < s.size(); ++j) {
155+
ans += tolower(s[j]);
156+
}
157+
return ans;
158+
}
159+
string t;
160+
for (char c : s) {
161+
if (isdigit(c)) {
162+
t += c;
163+
}
164+
}
165+
int cnt = t.size() - 10;
166+
string suf = "***-***-" + t.substr(t.size() - 4);
167+
return cnt == 0 ? suf : "+" + string(cnt, '*') + "-" + suf;
168+
}
169+
};
170+
```
114171
172+
### **Go**
173+
174+
```go
175+
func maskPII(s string) string {
176+
i := strings.Index(s, "@")
177+
if i != -1 {
178+
s = strings.ToLower(s)
179+
return s[0:1] + "*****" + s[i-1:]
180+
}
181+
t := []rune{}
182+
for _, c := range s {
183+
if c >= '0' && c <= '9' {
184+
t = append(t, c)
185+
}
186+
}
187+
s = string(t)
188+
cnt := len(s) - 10
189+
suf := "***-***-" + s[len(s)-4:]
190+
if cnt == 0 {
191+
return suf
192+
}
193+
return "+" + strings.Repeat("*", cnt) + "-" + suf
194+
}
115195
```
116196

117197
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public:
3+
string maskPII(string s) {
4+
int i = s.find('@');
5+
if (i != -1) {
6+
string ans;
7+
ans += tolower(s[0]);
8+
ans += "*****";
9+
for (int j = i - 1; j < s.size(); ++j) {
10+
ans += tolower(s[j]);
11+
}
12+
return ans;
13+
}
14+
string t;
15+
for (char c : s) {
16+
if (isdigit(c)) {
17+
t += c;
18+
}
19+
}
20+
int cnt = t.size() - 10;
21+
string suf = "***-***-" + t.substr(t.size() - 4);
22+
return cnt == 0 ? suf : "+" + string(cnt, '*') + "-" + suf;
23+
}
24+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
func maskPII(s string) string {
2+
i := strings.Index(s, "@")
3+
if i != -1 {
4+
s = strings.ToLower(s)
5+
return s[0:1] + "*****" + s[i-1:]
6+
}
7+
t := []rune{}
8+
for _, c := range s {
9+
if c >= '0' && c <= '9' {
10+
t = append(t, c)
11+
}
12+
}
13+
s = string(t)
14+
cnt := len(s) - 10
15+
suf := "***-***-" + s[len(s)-4:]
16+
if cnt == 0 {
17+
return suf
18+
}
19+
return "+" + strings.Repeat("*", cnt) + "-" + suf
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public String maskPII(String s) {
3+
if (Character.isLetter(s.charAt(0))) {
4+
s = s.toLowerCase();
5+
int i = s.indexOf('@');
6+
return s.substring(0, 1) + "*****" + s.substring(i - 1);
7+
}
8+
StringBuilder sb = new StringBuilder();
9+
for (char c : s.toCharArray()) {
10+
if (Character.isDigit(c)) {
11+
sb.append(c);
12+
}
13+
}
14+
s = sb.toString();
15+
int cnt = s.length() - 10;
16+
String suf = "***-***-" + s.substring(s.length() - 4);
17+
return cnt == 0 ? suf : "+" + "*".repeat(cnt) + "-" + suf;
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def maskPII(self, s: str) -> str:
3+
if s[0].isalpha():
4+
s = s.lower()
5+
return s[0] + '*****' + s[s.find('@') - 1:]
6+
s = ''.join(c for c in s if c.isdigit())
7+
cnt = len(s) - 10
8+
suf = '***-***-' + s[-4:]
9+
return suf if cnt == 0 else f'+{"*" * cnt}-{suf}'

0 commit comments

Comments
 (0)