字符串问题之 找到被指定的新类型字符

本文介绍了一种快速有效的算法,用于解决特定类型的字符串问题。该算法通过从指定位置向左扫描,统计连续的大写字母数量来确定新型字符。具体而言,文章详细解释了如何根据这些条件来选择新型字符,并提供了完整的Java实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串问题之 找到被指定的新类型字符

类似于 Ab  DC e

str="aaABCDEcBCg"   k=7  Ec     k=4 CD      k=10  g

解题思路:

  介绍一种最快最强的解题方法:

    从 k-1 位置开始 向左统计连续出现的大写字母数量 int  uNum    遇到小写字母就停止 

   如果 nNum为奇数, str[k..k+1]是被选中的新型字符

    如果nNum为偶数,且 str[k]是大写字母,str[k..k+1]是被选中的新型字符

    如果nNum为偶数,且srt[k]是小写字母,str[k]是被选中的新类型字符

 

package TT;



public class Test6 {
  
	public static String pointNewchar(String s, int k){
		if(s==null || s.equals("") || k<0 || k>=s.length()){
			return "";
		}
		
		char[] chas = s.toCharArray();
		int uNum = 0;
		for(int i = k-1; i>=0; i--){
			if( !isUpper(chas[i])){
				
				break;
					
			}
			
			uNum++;
			
		}
		
		if((uNum &1) ==1){    //判断是否是奇数
			 return s.substring(k-1, k+1);
			 
		}
		
		if(isUpper(chas[k])){
			return s.substring(k, k+2);
		}
		
		return String.valueOf(chas[k]);
		
		
	}
	
	
	public static boolean isUpper(char a){
		  
		if(a >'A' && a<'Z'){
			return true;
		}else{
			return false;
		}
	}
	
	
	
	public static void main(String[] args){
		 
		String str = "aaABCDEcBcg";
		int k = 7;
		String s = pointNewchar(str, k);
		System.out.println(s);
		
	}
	
	
	
	
}

  

 可以这么玩儿~

public class Test11 {

    public static int positionString(String str1, String str2) {
        String bigStr;
        String smallStr;
        int str1Length = str1.length();
        int str2Length = str2.length();
        if (str1Length >= str2Length) {
            bigStr = str1;
            smallStr = str2;
        } else {
            bigStr = str2;
            smallStr = str1;
        }

        int end = bigStr.length() - smallStr.length();
        for (int i = 0; i <= end; i++) {
            char now = bigStr.charAt(i);
            int smallIndex = 0;
            int bigIndex = i;
            if (now == smallStr.charAt(smallIndex)) {
                while ((smallIndex < (smallStr.length() - 1))
                        && bigStr.charAt(++bigIndex) == smallStr.charAt(++smallIndex))
                    ;
                if (smallIndex == (smallStr.length() - 1)) {
                    return i + 1;
                }
            }
        }
        return -1;

    }

    public static void main(String[] args) {
        String str1 = "aaABCDEcBCg";
        String str2 = "g";
        System.out.println(positionString(str1, str2));
    }

}

 

posted @ 2017-08-22 16:12 toov5 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值