2019年秋,京东秋招数据分析岗位 最优打字策略 -java

1.题目

2.思路

我的思路是字符的长度+大小写转换的次数

即 如AaAAAA      字符长度为6    然后A到a需要按一次shift a到A需要按一次shif这样就只需要按两次  一共6+2=8次

所以题目中生命了一个flage变量用来标记当前是大写还是小写

初始化flage的时候如果字符串第一个字符是大写flage=1 否则即小写则flage=0;

然后再遍历的时候

第一种情况:bB flage==0 && m2==0 && m3==1

第二种情况:Bb flage==1 && m2==1 && m3==0

3.代码

package test;
import java.util.*;


public class test5 {
    
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        String str=sc.next();
        
        int flage=0;//标记变化,最开始为0表示小写  1表示大写   A-Z 65-90   a-z  97-122
        int count=0;
        int m2=0,m3=0;
        
        //第一个字母 大写  flage设置为1
        if(str.charAt(0)>='A'&& str.charAt(0)<='Z'){
            flage=1;
        }
        
        
        for(int i=0;i<n-1;i++){
            if(str.charAt(i)>='A'&& str.charAt(i)<='Z')
                m2=1;//大写
            if(str.charAt(i)>='a'&& str.charAt(i)<='z')
                m2=0;
            if(str.charAt(i+1)>='A'&& str.charAt(i+1)<='Z')
                m3=1;//大写
            if(str.charAt(i+1)>='a'&& str.charAt(i+1)<='z')
                m3=0;
            
            if(flage==0 && m2==0 && m3==1){//bB
                count++;
                flage=1;
                //System.out.println("bB"+count);
            }
            if(flage==1 && m2==1 && m3==0){//Bb
                count++;
                flage=0;
                //System.out.println("Bb"+count);
                }
            
        }
        
       // System.out.println(n);
        System.out.println(n+count);

    }
}

 

结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值