题解 | #字符串加密#

字符串加密

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

全部评论

相关推荐

02-11 17:47
已编辑
门头沟学院 Java
神哥不得了:神哥来啦~建议先在网上找一些高频的八股去背,然后再去广泛的背八股,这样的学习会更有效率一些,简历的这两个项目建议换掉,换成两个高质量的项目,这样的话获得面试的比例会更高一点,专业技能的话排版要注意一下,要加句号的话就都加,要不加就都不加,荣誉奖项的话写在教育经历里边吧,这个确实没有太多的含金量
点赞 评论 收藏
分享
01-29 16:08
已编辑
华南农业大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务