133 找到指定类型的新类型字符
Table of Contents

ac

新类型字符的定义如下:
1. 新类型字符是长度为1或者2的字符串。
2. 表现形式可以仅是小写字母,例如,"e"; 也可以是大写字母+小写字母,例如,"Ab";还可以是大写字母+大写字母,例如,"DC"
现在给定一个字符串str, str 一定是若干新类型字符 正确组合的结果。比如"eaCCBi",由新类型字符"e""a”、"CC"和"Bi"拼成。 再给定一个整数k,代表str中的位置。请返回第k个位置的新类型字符。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;


public class Main {
    public static Scanner sc = new Scanner(System.in);

    public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    public static long mod = (long)Math.pow(2,29);

    public static void main(String[] args) throws Exception {
        String nk = reader.readLine();
        String[] nkArr = nk.split(" ");
        int n = Integer.valueOf(nkArr[0]);
        int k = Integer.valueOf(nkArr[1]);
        String str = reader.readLine();

        System.out.println(getKth(str, k));
    }

    static String getKth(String str, int k){
        char[] chars = str.toCharArray();
        int uNum = 0;
        for(int i=k-1;i>=0;i--){
            if(!isUpper(chars[i])){
                break;
            }
            uNum++;
        }
        // 奇数
        if((uNum & 1) == 1){
            return str.substring(k-1, k+1);
        }
        // 偶数 且k位置是大写字母
        if(isUpper(chars[k])){
            return str.substring(k, k+2);
        }
        // 偶数 且k位置是小写字母
        return String.valueOf(chars[k]);
    }

    static boolean isUpper(char c){
        if(c <= 'Z' && c >= 'A'){
            return true;
        }
        return false;
    }
}
/*
11 7
aaABCDEcBCg

Ec
*/