新类型字符是指:长度为1或2的字符串,表现形式只能为单个小写字母、大写字母+小写字母、大写字母+大写字母,
三种形式,给定的字符串str由若干个新类型字符组成,问给定位置K上的新类型字符是?
思路:
* 一. 可以从左到右遍历str,按照题目规则,将str拆分,然后根据k所在位置输出
* 二. 观察题目发现
* k如果是小写字母,它左边的连续大写字母是奇数个,则结果必定包含左边一个字符
* k如果是大写字母,则返回它和右边的字母
* 其他情况,直接返回k所在的字母
源代码
package com.javakk.ex1;
/**
* @Time 2018年8月31日 上午9:56:59
* @Title { 找到被指的新类型字符 }
* @Desc { 新类型字符是指:长度为1或2的字符串,表现形式只能为单个小写字母、大写字母+小写字母、大写字母+大写字母,
* 三种形式,给定的字符串str由若干个新类型字符组成,问给定位置K上的新类型字符是? }
* @Email 92920@sohu.com
* @Author JavaKK
*/
public class Ex14 {
public static void main(String[] args) {
String str = "aaABCDEcBCg";
int k = 7;
String res = pointNewChar(str, k);
System.out.println(res);
}
/**
* 思路:
* 一. 可以从左到右遍历str,按照题目规则,将str拆分,然后根据k所在位置输出
* 二. 观察题目发现
* k如果是小写字母,它左边的连续大写字母是奇数个,则结果必定包含左边一个字符
* k如果是大写字母,则返回它和右边的字母
* 其他情况,直接返回k所在的字母
*
* @param str
* @param k
* @return
*/
private static String pointNewChar(String str, int k) {
if (str == null || str.length() == 0 || k < 0 || k >= str.length()) {
return "";
}
char[] chas = str.toCharArray();
int left = 0;
for (int i = k - 1; i > 1; i--) {
if (!isUpper(chas[i])) {
break;
}
left++;
}
if ((left & 1) == 1) {
return str.substring(k - 1, k + 1);
}
if (isUpper(chas[k])) {
return str.substring(k, k + 2);
}
return String.valueOf(chas[k]);
}
private static boolean isUpper(char c) {
return String.valueOf(c).toUpperCase().equals(String.valueOf(c));
}
}