题目来自于:https://www.acmcoder.com/#/practice/code
题目描述:小明很喜欢打字,今天小红给了小明一个字符串。这个字符串只包含大写和小写字母。 我们知道,按下CapsLock键,可以切换大小写模式。我们在小写模式时候,同时按下shift+字母键,就能写出大写字母。在大写模式的时候,按下shift+字母键,就能写出小写字母。现在问题来了,给你一个字符串,问你最少使用多少个按键,就可以写出这个字符串呢?注意,按shift和字母键,算两次按键。开始时均为小写状态。
输入描述:数据一个字符串s,s的长度小于等于100。仅包含大小写字母。
输出描述:对于每组数据,输出最少按键次数。
样例输入: AAAAAA
样例输出: 7
我能想到的只有最笨的办法。。。。
1、将连续大写或小写字母截取成类似于
[['a', 'a'],['A', 'A', 'A'],['a']]
的数组2、根据当前大小写模式,以及将要输入的字母大小写,判断采取CapsLock还是shift的方式打字,计算按键次数
var printOut = function(text){
var arr = text.split('');
var count = 0;
var newarr = [];
var flag = 'xiao'
//1、将连续大写或小写字母截取成类似于[['a', 'a'],['A', 'A', 'A'],['a']]的数组
while(arr.length){
if(arr[0]>= 'a' && arr[0] <= 'z'){
var DaxieIndex = arr.findIndex((item,index)=>{
if(item >= 'A' && item <= 'Z'){
//arr[0]是小写,找到跟第一个大写字母的位置,将小写的字母截取push到newarr
return index
}
})
//找到即截取执行push,没找到即把剩余arr全部截取,即跳出循环
DaxieIndex===-1 ? newarr.push(arr.splice(0,arr.length)): newarr.push(arr.splice(0,DaxieIndex))
}else{
var XiaoxieIndex = arr.findIndex((item,index)=>{
if(item >= 'a' && item <= 'z'){
//arr[0]是大写,找到跟第一个小写字母的位置,将大写的字母截取push到newarr
return index
}
});
//找到则截取执行push,没找到则把剩余arr全部截取,即跳出循环
XiaoxieIndex===-1 ? newarr.push(arr.splice(0,arr.length)): newarr.push(arr.splice(0,XiaoxieIndex))
}
}
console.log(newarr)
//2、计算按键次数
// + 当前flag是小写状态时,
// 若item[0]为单个大写字母则shift+字母,count+=2,
// 若item[0]为多个大写字母则CapsLock+字母,count+=(item.length + 1), 并切换flag为大写状态
// 若item[0]为小写字母,则count+=item.length
// + 当前flag是大写状态时,
// 若item[0]为单个小写字母则shift+字母,count+=2,
// 若item[0]为多个小写字母则CapsLock+字母,count+=(item.length + 1), 并切换flag为小写状态
// 若item[0]为大写字母,则count+=item.length
newarr.forEach((item,index)=>{
if(flag === 'da'){
if(item[0] >= 'a' && item[0] <= 'z'){
if(item.length>1){
flag = 'xiao'
count += (item.length + 1)
}else{
count += 2
}
}else{
count += item.length
}
}else{
if(item[0] >= 'A' && item[0] <= 'Z'){
if(item.length>1){
flag = 'da'
count += (item.length + 1)
}else{
count += 2
}
}else{
count += item.length
}
}
})
console.log(count)
};
printOut('aaaAAAaAAAAaassDDD')
结果:
//newarr----------------------
(6)[Array(3), Array(3), Array(1), Array(4), Array(4), Array(3)]
0: (3) ['a', 'a', 'a']
1: (3) ['A', 'A', 'A']
2: ['a']
3: (4) ['A', 'A', 'A', 'A']
4: (4) ['a', 'a', 's', 's']
5: (3) ['D', 'D', 'D']
//count----------------------
22