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);
}
}
结果