题意整理。
- 输入一串明文,根据规则加密为密文。
- 如果是小写字母,按abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9的规则变换。如果是大写字母,转换为小写字母,再后移一位。如果是数字和其它字符,保持不变。
方法一(模拟)
1.解题思路
- 遍历字符串中所有字符。
- 如果是小写字母,按对应规则转换后加入到res。如果是大写字母,转小写再后移一位,加入到res。如果是数字和其它字符,直接加入到res。
图解展示:
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.复杂度分析
- 时间复杂度:需要遍历字符串中所有的字符,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。
方法二(利用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.复杂度分析
- 时间复杂度:需要遍历字符串中所有的字符,所以时间复杂度为。
- 空间复杂度:需要额外常数级别的空间,所以空间复杂度为。

 京公网安备 11010502036488号
京公网安备 11010502036488号