算法题-密码变换算法

93 阅读1分钟

1. 题目描述

现在有一种密码变换算法。 九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9.而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。数字和其它的符号都不做变换

  • 数据范围: 输入的字符串长度满足 1≤n≤100

  • 输入描述: 输入一组密码,长度不超过100个字符。

  • 输出描述: 输出密码变换后的字符串

2. 解答题目

package main

import (
    "fmt"
    "strings"
)

func main() {
 	m := map[string]byte{
		"abc":  50,
		"def":  51,
		"ghi":  52,
		"jkl":  53,
		"mno":  54,
		"pqrs": 55,
		"tuv":  56,
		"wxyz": 57,
	}
	var s string
	fmt.Scan(&s)
	bt := make([]byte, 0)
	for i := 0; i < len(s); i++ {
		switch {
		//处理大写字母
		case s[i] >= 'A' && s[i] <= 'Z':
			if s[i] != 'Z' {
				bt = append(bt, s[i]+33)
			} else {
				bt = append(bt, 'a')
			}
		//处理小写字母
		case s[i] >= 'a' && s[i] <= 'z':
			for k, v := range m {
				if strings.Contains(k, string(s[i])) {
					bt = append(bt, v)
				}
			}
		//处理数字
		default:
			bt = append(bt, s[i])
		}
	}
	fmt.Println(string(bt))    
}