【算法基础】找到被指的新类型字符

新类型字符是指:长度为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));
	}

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值