1. 程式人生 > >【Leetcode_總結】831. 隱藏個人資訊 - python

【Leetcode_總結】831. 隱藏個人資訊 - python

Q:

給你一條個人資訊 string S,它可能是一個郵箱地址,也可能是一個電話號碼。

我們將隱藏它的隱私資訊,通過如下規則:

1. 電子郵箱

定義名稱 <name> 的長度大於2,並且只包含小寫字母 a-z 和大寫字母 A-Z。

電子郵箱地址由名稱 <name> 開頭,緊接著是符號 '@',後面接著一個名稱 <name>,再接著一個點號 '.',然後是一個名稱 <name>。

電子郵箱地址確定為有效的,並且格式是"[email protected]"。

為了隱藏電子郵箱,所有的名稱 <name> 必須被轉換成小寫的,並且第一個名稱 <name> 的第一個字母和最後一個字母的中間的所有字母由 5 個 '*' 代替。

2. 電話號碼

電話號碼是一串包括陣列 0-9,以及 {'+', '-', '(', ')', ' '} 這幾個字元的字串。你可以假設電話號碼包含 10 到 13 個數字。

電話號碼的最後 10 個數字組成本地號碼,在這之前的數字組成國際號碼。注意,國際號碼是可選的。我們只暴露最後 4 個數字並隱藏所有其他數字。

本地號碼是有格式的,並且如 "***-***-1111" 這樣顯示,這裡的 1 表示暴露的數字。

為了隱藏有國際號碼的電話號碼,像 "+111 111 111 1111",我們以 "+***-***-***-1111" 的格式來顯示。在本地號碼前面的 '+' 號和第一個 '-' 號僅當電話號碼中包含國際號碼時存在。例如,一個 12 位的電話號碼應當以 "+**-" 開頭進行顯示。

注意:像 "(",")"," " 這樣的不相干的字元以及不符合上述格式的額外的減號或者加號都應當被刪除。

 

最後,將提供的資訊正確隱藏後返回。

 

示例 1:

輸入: "[email protected]"
輸出: "l*****[email protected]"
解釋: 
所有的名稱轉換成小寫, 第一個名稱的第一個字元和最後一個字元中間由 5 個星號代替。
因此,"leetcode" -> "l*****e"。

示例 2:

輸入: "[email protected]"
輸出: "a*****[email protected]
" 解釋:  第一個名稱"ab"的第一個字元和最後一個字元的中間必須有 5 個星號 因此,"ab" -> "a*****b"。

連結:https://leetcode-cn.com/problems/masking-personal-information/

思路:讀懂題,然後字串加加加

程式碼:

class Solution:
    def maskPII(self, S):
        """
        :type S: str
        :rtype: str
        """
        if S[0].isalpha():
            S = S.lower()
            end = S.split("@")[1]
            head = S.split("@")[0][0]+'*' * 5 + S.split("@")[0][-1]
            return head+'@'+end
        else:
            S = S.replace('+', '').replace('-', '').replace('(', '').replace(')', '').replace(' ', '')
            len_ = len(S)
            if len_ > 10:
                return '+' + '*' * (len_-10) + '-***-***-'+ S[-4:]
            else:
                return '***-***-' + S[-4:]