题解 | #简单密码#

简单密码

http://www.nowcoder.com/practice/7960b5038a2142a18e27e4c733855dac

题意整理。

  • 输入一串明文,根据规则加密为密文。
  • 如果是小写字母,按abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9的规则变换。如果是大写字母,转换为小写字母,再后移一位。如果是数字和其它字符,保持不变。

方法一(模拟)

1.解题思路

  • 遍历字符串中所有字符。
  • 如果是小写字母,按对应规则转换后加入到res。如果是大写字母,转小写再后移一位,加入到res。如果是数字和其它字符,直接加入到res。

图解展示: alt

2.代码实现

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        //标准输入
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            //输入明文
            String s=sc.next();
            //记录即将输出的密文
            StringBuilder res=new StringBuilder();
            for(char c:s.toCharArray()){
                //abc对应2
                if(c-'a'>=0&&c-'a'<=2){
                    res.append(2);
                }
                //def对应3
                else if(c-'a'>=3&&c-'a'<=5){
                    res.append(3);
                }
                //ghi对应4
                else if(c-'a'>=6&&c-'a'<=8){
                    res.append(4);
                }
                //jkl对应5
                else if(c-'a'>=9&&c-'a'<=11){
                    res.append(5);
                }
                //mno对应6
                else if(c-'a'>=12&&c-'a'<=14){
                    res.append(6);
                }
                //pqrs对应7
                else if(c-'a'>=15&&c-'a'<=18){
                    res.append(7);
                }
                //tuv对应8
                else if(c-'a'>=19&&c-'a'<=21){
                    res.append(8);
                }
                //wxyz对应9
                else if(c-'a'>=22&&c-'a'<=25){
                    res.append(9);
                }
                //大写字母转小写后移一位
                else if(c>='A'&&c<'Z'){
                    res.append((char)(c+33));
                }
                //如果是Z,直接变为a
                else if(c=='Z'){
                    res.append('a');
                }
                //数字和其它符号不做变换
                else{
                    res.append(c);
                }
            }
            System.out.println(res.toString());
        }

    }
}

3.复杂度分析

  • 时间复杂度:需要遍历字符串中所有的字符,所以时间复杂度为O(n)O(n)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)

方法二(利用io流)

1.解题思路

思路和方法一基本一致,不同的是通过io流操作来处理输入的数据。

2.代码实现

import java.io.*;

public class Main{
    public static void main(String[] args) throws Exception{
        //Io处理输入
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String s;
        while((s=br.readLine())!=null){
            //记录即将输出的密文
            StringBuilder res=new StringBuilder();
            for(char c:s.toCharArray()){
                //abc对应2
                if(c-'a'>=0&&c-'a'<=2){
                    res.append(2);
                }
                //def对应3
                else if(c-'a'>=3&&c-'a'<=5){
                    res.append(3);
                }
                //ghi对应4
                else if(c-'a'>=6&&c-'a'<=8){
                    res.append(4);
                }
                //jkl对应5
                else if(c-'a'>=9&&c-'a'<=11){
                    res.append(5);
                }
                //mno对应6
                else if(c-'a'>=12&&c-'a'<=14){
                    res.append(6);
                }
                //pqrs对应7
                else if(c-'a'>=15&&c-'a'<=18){
                    res.append(7);
                }
                //tuv对应8
                else if(c-'a'>=19&&c-'a'<=21){
                    res.append(8);
                }
                //wxyz对应9
                else if(c-'a'>=22&&c-'a'<=25){
                    res.append(9);
                }
                //大写字母转小写后移一位
                else if(c>='A'&&c<'Z'){
                    res.append((char)(c+33));
                }
                //如果是Z,直接变为a
                else if(c=='Z'){
                    res.append('a');
                }
                //数字和其它符号不做变换
                else{
                    res.append(c);
                }
            }
            System.out.println(res.toString());
        }

    }
}

3.复杂度分析

  • 时间复杂度:需要遍历字符串中所有的字符,所以时间复杂度为O(n)O(n)
  • 空间复杂度:需要额外常数级别的空间,所以空间复杂度为O(1)O(1)
xqxls的题解 文章被收录于专栏

牛客题解

全部评论

相关推荐

来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
lllllkin:感觉可以精简到一页简历,有些排版感觉不是必须的。 时间线越早的,你自己越熟悉的放前面。描述可以更精简些,一些问题解决感觉可以不用写具体技术栈,卖个关子,等面试官问。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 11:35
程序员小白条:话太多,没实力和学历,差不多回答回答就行了,身份地位不一样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务