题目:
给你一条个人信息字符串 s ,可能表示一个 邮箱地址 ,也可能表示一串 电话号码 。返回按如下规则 隐藏 个人信息后的结果:
算法:
方法一:模拟
难度一般,考虑电话号码'-'增加的细节,最后一个'-'如何不多增加。
func maskPII(s string) string {
if isEmail(s) {
return convertEmail(s)
}
return convertPhoneNumber(s)
}
func isEmail(s string) bool {
for i := 0; i < len(s); i ++ {
if s[i] == '@' {
return true
}
}
return false
}
func lower(byt byte) byte {
if 'A' <= byt && byt <= 'Z' {
return byt + 'a' -'A'
}
return byt
}
func convertEmail(s string) string {
ans := make([]byte, 0)
i := 0
for i < len(s) {
if s[i] == '@' {
ans = append(ans, []byte{lower(s[0]),'*','*','*','*','*',lower(s[i - 1])}...)
break
}
i ++
}
for i < len(s) {
if 'A' <= s[i] && s[i] <= 'Z' {
ans = append(ans, s[i] + 'a' -'A')
} else {
ans = append(ans, s[i])
}
i ++
}
return string(ans)
}
func convertPhoneNumber(s string) string {
ans := make([]byte, 0)
for i := len(s) - 1; i >= 0; i -- {
if '0' <= s[i] && s[i] <= '9' {
if len(ans) == 4 || len(ans) == 8 || len(ans) == 12 {
ans = append(ans, '-')
}
if len(ans) <= 3 {
ans = append(ans, s[i])
} else {
ans = append(ans, '*')
}
}
}
if len(ans) > 12 {
ans = append(ans, '+')
}
left, right := 0, len(ans) - 1
for left < right {
ans[left], ans[right] = ans[right], ans[left]
left ++
right --
}
return string(ans)
}