题解 | #字符串加密#
字符串加密
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)
//保证输入的字符串为小写,可以使用函数将算法封装
//我这里也不是最优解 还有很多可以优化的地方
}
