题目描述:
在游戏口袋妖怪中,有时会碰到这样的关卡:在地面上有一些箭头,当你踩上这个箭头时你就会被迫按箭头指示的方向传送。现在你的面前有一行由这样的箭头组成的装置,每个箭头都是指向左或者指向右的,如:
你可以从任意的位置进入这个装置,当你踏上某个格子后,就会被按该格子箭头指示的方向传送,然后该格子的箭头就会消失。你会一直按这个方向前进直到碰到另一个有箭头的格子,然后你的前进方向会改为该格子的箭头方向,同时该格子的箭头也会消失。当你往一个方向前进但前面没有包含箭头的格子时,你就会被传送出这个装置。在上图中,如果你一开始进入第2个格子(从左往右),你会按如下过程移动:1. 向右移动并移除第2个格子的箭头;2. 向左移动并移除第3个格子的箭头;3. 向右移动并移除第1个格子的箭头;4. 向右移动并移除第4个格子的箭头;5. 向左移动并移除第5个格子的箭头;6. 移出装置。请你计算你最多能够移除多少个箭头。
输入描述
第一行包含一个整数n,表示格子的个数。1≤n≤105
第二行包含一个由’>’和’<’构成的长度为n的字符串。
输出描述
输出对应的答案。
样例输入
7 >><><<<
样例输出
7
提示
Input Sample 2 7 <<><<>> Output Sample 2 5
计算出来,用作跟程序结果对比
['>', '>', '<', '>', '<', '<', '<']
0 3
1 5
2 6
3 7
4 7
5 6
6 4
1、首先要循环
arr.length
次,内计算从每个位置能够移除的箭头数2、从 j= i 位置开始移除,每经过一个位置count+1,然后把该项删除,挪动 j 位置
3、在count+1和删除的过程中还需要做判断进行其他操作
- 若当前位置是 ‘<’ 时,
当前位置是首位,则 count +1 跳出循环结束
否则删除当前位置数据, count +1 ,并往左移一个位置,即 j-1- 若当前位置是 ‘>’ 时,
当前位置是首位,则 count +1 跳出循环结束
否则删除当前位置数据, count +1 ,不需移动位置,删除当前位置后,j即为被删位置的后一位4、整理数据,求出最多移除的箭头。
var printOut = function(str){
let arr = str.split('')
let resarr = []
//1、首先要循环`arr.length`次,
for(i=0;i<arr.length;i++){
let temparr = [...arr]
resarr.push([i]);
let j=i;
let count = 0;
while(j<temparr.length){
let firstson = temparr[j];
if(firstson==='<'){
if(j===0){
j=temparr.length
}else{
temparr.splice(j,1);
j--;
}
}else{
if(j===temparr.length-1){
j=temparr.length
}else{
temparr.splice(j,1);
}
}
count++;
}
resarr[i].push(count)
}
resarr.forEach(item=>{
})
console.log(resarr)
//4、整理数据,求出最多移除的箭头。
let maxlength = 0
resarr.forEach(item=>{
maxlength = item[1]>maxlength ? item[1] : maxlength
})
console.log(maxlength)
}
printOut('>><><<<')
结果:
//resarr
(7) [Array(2), Array(2), Array(2), Array(2), Array(2), Array(2), Array(2)]
0: (2) [0, 3]
1: (2) [1, 5]
2: (2) [2, 6]
3: (2) [3, 7]
4: (2) [4, 7]
5: (2) [5, 6]
6: (2) [6, 4]
length: 7
//maxlength
7