831.隐藏个人信息

90 阅读1分钟

题目:
给你一条个人信息字符串 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)
}