题解 | #字符串加密#
字符串加密
https://www.nowcoder.com/practice/e4af1fe682b54459b2a211df91a91cf3
//找到将密匙中的重复字母去除 //可以用链表构建字符串 也可以用数组 package main import "fmt" func main() { var input string var input2 string fmt.Scanln(&input) fmt.Scanln(&input2) //1.去除密匙中重复字母 //采用map的方法实现 m := make(map[string]bool) mishi := "" for i:=0; i < len(input); i++ { //下面的if判断,如果该字母已经在map中添加过,此处对应的值为true //也可以使用map的判断某个值是否在map中的方法: //go语言中有个判断map中键是否存在的特殊写法,格式如下: //value, ok := map[key] if m[input[i:i+1]] != true { mishi = mishi + input[i:i+1] } m[input[i:i+1]] = true } //实验密匙去重效果 //fmt.Print(mishi) //2.将密匙转换成新的字母表 采用数组方法 //2.1 建立一个正常顺序的数组 normal var normal = [26]string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"} //2.2 将密匙字母表存在数组 crypto //先将mishi中的字母存进crypto //然后将normal中的其他字母存进crypto var crypto []string for i:=0; i<len(mishi); i++ { crypto = append(crypto, mishi[i:i+1]) } for _, str := range normal { if m[str] != true { crypto = append(crypto, str) } } //fmt.Print(crypto) //fmt.Print(input2) cryptoString := "" //2.3 找出需要加密的字符串在正常数组里的字母index //2.4 将这些index对应的密匙字母表里的字母找出就是密文 for j:=0; j<len(input2); j++ { for i:=0; i<26; i++ { if normal[i] == input2[j:j+1] { cryptoString = cryptoString + crypto[i] } } } fmt.Print(cryptoString) //保证输入的字符串为小写,可以使用函数将算法封装 //我这里也不是最优解 还有很多可以优化的地方 }