Java實現 LeetCode 831 隱藏個人信息(暴力)

831. 隱藏個人信息

給你一條個人信息字符串 S,它可能是一個 郵箱地址 ,也可能是一串 電話號碼 。

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

  1. 電子郵箱

定義名稱 name 是長度大於等於 2 (length ≥ 2),並且只包含小寫字母 a-z 和大寫字母 A-Z 的字符串。

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

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

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

  1. 電話號碼

電話號碼是一串包括數字 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"。
示例 3:

輸入: "1(234)567-890"
輸出: "***-***-7890"
解釋: 
10 個數字的電話號碼,那意味着所有的數字都是本地號碼。
示例 4:

輸入: "86-(10)12345678"
輸出: "+**-***-***-5678"
解釋: 
12 位數字,2 個數字是國際號碼另外 10 個數字是本地號碼 。
 

注意:

S.length <= 40。
郵箱的長度至少是 8。
電話號碼的長度至少是 10。

class Solution {
    public String maskPII(String S) {
		return (S.indexOf("@")!=-1)?maskEmail(S):maskPhone(S.toCharArray());
	}

	public String maskEmail(String s){
		StringBuilder sb = new StringBuilder();
		int index = s.indexOf("@");
		sb.append(s.charAt(0)).append("*****").append(s.charAt(index-1)).append(s.substring(index));
		return sb.toString().toLowerCase();
	}

	public String maskPhone(char[] chs){
		int cnt = 0;
		StringBuilder sb = new StringBuilder();

		for(int i=chs.length-1;i>=0;i--){
			char ch = chs[i];
			if(Character.isDigit(ch)){
				if(cnt == 4 || cnt == 7 || cnt == 10) 
				   sb.append("-");
				if (cnt < 4)
					sb.append(ch);
				else
					sb.append("*");
				cnt++; 
			} 
		}

		if(cnt>10){
			sb.append('+');
		}

		return sb.reverse().toString();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章