[编程题] 红和绿
时间限制:1秒
空间限制:32768K
牛牛有一些排成一行的正方形。每个正方形已经被染成红色或者绿色。牛牛现在可以选择任意一个正方形然后用这两种颜色的任意一种进行染色,这个正方形的颜色将会被覆盖。
牛牛的目标是在完成染色之后,每个红色R都比每个绿色G距离最左侧近。牛牛想知道他最少需要涂染几个正方形。
如样例所示: s = RGRGR
我们涂染之后变成RRRGG满足要求了,涂染的个数为2,没有比这个更好的涂染方案。
输入描述:
输入包括一个字符串s,字符串s长度length(1 ≤ length ≤ 50),其中只包括’R’或者’G’,分别表示红色和绿色。
输出描述:
输出一个整数,表示牛牛最少需要涂染的正方形数量
输入例子1:
RGRGR
输出例子1:
2
思路:
因为字符串长度不大,所以直接遍历所有可能的结果,比如对RGRGR这个串,最后可能变为是:GGGGG~RRRRR所以直接暴力算出变为每种情况所要的涂染数量,最后找出最小的就是最优解
let ans = (str)=>{
let newStr = str.split('')
let newStr2 = [],ans_arr = []
for(let i=0;i<newStr.length;i++){
newStr2.push('G')
ans_arr[i]=0
}
for(let i=0;i<newStr.length;i++){
for(let j=0;j<newStr.length;j++){
if(newStr[j]!==newStr2[j]){
ans_arr[i]++;
}
}
newStr2[i] = 'R'
}
ans_arr.sort((a,b)=>{return a-b})
return ans_arr[0]
}
console.log(ans('RGRGR'))
console.log(ans('GGGGR'))
console.log(ans('GGGGRRR'))
console.log(ans('RRRGGGRGGGRGGRRRGGRRRGR'))
console.log(ans('GGGRRRRGRGRRRGRRRRGRGGGRGRRRRRRGGRGRGRGGRRRRGRGGGR'))