LeetCode 831. 隐藏个人信息
1. 題目
給你一條個人信息字符串 S,它可能是一個 郵箱地址 ,也可能是一串 電話號碼 。
我們將隱藏它的隱私信息,通過如下規則:
定義名稱 name 是長度大于等于 2 (length ≥ 2),并且只包含小寫字母 a-z 和大寫字母 A-Z 的字符串。
電子郵箱地址由名稱 name 開頭,緊接著是符號 ‘@’,后面接著一個名稱 name,再接著一個點號 ‘.’,然后是一個名稱 name。
電子郵箱地址確定為有效的,并且格式是 “name1@name2.name3”。
為了隱藏電子郵箱,所有的名稱 name 必須被轉換成小寫的,并且第一個名稱 name 的第一個字母和最后一個字母的中間的所有字母由 5 個 ‘*’ 代替。
電話號碼是一串包括數字 0-9,以及 {'+', '-', '(', ')', ' '} 這幾個字符的字符串。你可以假設電話號碼包含 10 到 13 個數字。
電話號碼的最后 10 個數字組成本地號碼,在這之前的數字組成國際號碼。注意,國際號碼是可選的。我們只暴露最后 4 個數字并隱藏所有其他數字。
本地號碼是有格式的,并且如 "***-***-1111" 這樣顯示,這里的 1 表示暴露的數字。
為了隱藏有國際號碼的電話號碼,像 "+111 111 111 1111",我們以 "+***-***-***-1111" 的格式來顯示。在本地號碼前面的 '+' 號和第一個 '-' 號僅當電話號碼中包含國際號碼時存在。例如,一個 12 位的電話號碼應當以 "+**-" 開頭進行顯示。
注意:像 "(",")"," " 這樣的不相干的字符以及不符合上述格式的額外的減號或者加號都應當被刪除。
最后,將提供的信息正確隱藏后返回。
示例 1: 輸入: "LeetCode@LeetCode.com" 輸出: "l*****e@leetcode.com" 解釋: 所有的名稱轉換成小寫, 第一個名稱的第一個字符和最后一個字符中間由 5 個星號代替。 因此,"leetcode" -> "l*****e"。示例 2: 輸入: "AB@qq.com" 輸出: "a*****b@qq.com" 解釋: 第一個名稱"ab"的第一個字符和最后一個字符的中間必須有 5 個星號 因此,"ab" -> "a*****b"。示例 3: 輸入: "1(234)567-890" 輸出: "***-***-7890" 解釋: 10 個數字的電話號碼,那意味著所有的數字都是本地號碼。示例 4: 輸入: "86-(10)12345678" 輸出: "+**-***-***-5678" 解釋: 12 位數字,2 個數字是國際號碼另外 10 個數字是本地號碼 。注意: S.length <= 40。 郵箱的長度至少是 8。 電話號碼的長度至少是 10。來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/masking-personal-information
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 通過@判斷是郵箱還是電話
- 電話的話對數字個數計數
0 ms 6.1 MB
class Solution:# py3def maskPII(self, S: str) -> str:at = '@' in Sans = ""if at:if S[0].isupper():ans = S[0].lower()+"*****"else:ans = S[0]+"*****"idx = S.index('@')for i in range(idx-1, len(S)):if S[i].isupper():ans += S[i].lower()else:ans += S[i]else:count = 0last4 = ""for i in range(len(S)-1,-1,-1):if S[i].isdigit():count += 1if len(last4)<4:last4 = S[i]+last4if count==10:ans = "***-***-"+last4else:ans = "+"+'*'*(count-10)+"-***-***-"+last4return ans52 ms 13.6 MB
關注我的公眾號,一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 831. 隐藏个人信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1155. 掷骰子的N
- 下一篇: LeetCode 1249. 移除无效的