Skip to content

7-18 生成字母串

英语老师要求学生按照如下规则写一串字母:

  • 如果写了某个大写字母,下一个就必须写同个字母的小写,或者写字母表中下一个字母的大写;
  • 如果写了某个小写字母,下一个就必须写同个字母的大写,或者写字母表中前一个字母的小写。

例如 aAaABCDdcbBC 就是一个合法的字母串;而 dEFfeFGhI 就是非法的。

本题就请你编写程序,自动生成一个合法的字母串。

输入格式:

输入在第一行给出一个不超过 104 的正整数 N 和第一个字母。

随后一行给出一个由 01 组成的长度为 N 的字符串。这个串给出了字母串的生成规则:从第一个字母开始,如果对应的规则串字符是 0,则下一个字母应该生成当前字母的大/小写;如果是 1 则下一个字母应该生成当前字母的前/后一个字母。

**注意:**因为字母表中 a 没有前一个字母,Z 没有后一个字母,所以如果此时遇到 1 就忽略之。

输出格式:

在一行中输出按规则生成的字母串。

输入样例:

tex
12 a
001011101101
12 a
001011101101

输出样例:

tex
aAaABCDdcbBC
aAaABCDdcbBC

Solution:

java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] input = in.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        char c = input[1].charAt(0);
        char[] chars = in.readLine().toCharArray();
        StringBuilder sb = new StringBuilder();
        sb.append(c);
        for (int i = 0; i < chars.length; i++) {
            int num = chars[i] - '0';
            if (num == 0) {
                if (c >= 'A' && c <= 'Z') {
                    c += 32;
                    sb.append(c);
                } else if (c >= 'a' && c <= 'z') {
                    c -= 32;
                    sb.append(c);
                }
            } else {
                if (c >= 'A' && c < 'Z') {
                    c += 1;
                    sb.append(c);
                } else if (c > 'a' && c <= 'z') {
                    c -= 1;
                    sb.append(c);
                }
            }
        }
        System.out.println(sb);
    }
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] input = in.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        char c = input[1].charAt(0);
        char[] chars = in.readLine().toCharArray();
        StringBuilder sb = new StringBuilder();
        sb.append(c);
        for (int i = 0; i < chars.length; i++) {
            int num = chars[i] - '0';
            if (num == 0) {
                if (c >= 'A' && c <= 'Z') {
                    c += 32;
                    sb.append(c);
                } else if (c >= 'a' && c <= 'z') {
                    c -= 32;
                    sb.append(c);
                }
            } else {
                if (c >= 'A' && c < 'Z') {
                    c += 1;
                    sb.append(c);
                } else if (c > 'a' && c <= 'z') {
                    c -= 1;
                    sb.append(c);
                }
            }
        }
        System.out.println(sb);
    }
}

Released under the MIT License.