描述
给定一个长度为NN的只包含字母A 和/或 B 的字符串SS。我们的目标是通过删除最少的字符使得字符串变成A…AB…B的形式(所有的A都在B前面)。特别的,如果字符串只包含A或B也是符合条件的。
请写一个函数,给定一个字符串SS,返回最小需要删除的字符数。
说明
- NN 的取值范围是[1,100,000][1,100000];
- 字符串SS只包含字符 A 和/或 B.
样例
- 样例 1
输入: "BAAABAB"
输出: 2
说明: 我们可以通过删除第一个B和最后一个A来生成"AAABB"
- 样例 2
输入: "BBABAA"
输出: 3
说明: 我们可以删除所有的A或B
- 样例 3
输入: "AABBBB"
输出: 0
说明: 我们不需要删除任何字符,因为字符串本身符合条件。
解析
minDeletionsToObtainStringInRightFormat = function (s) {
var len=s.length, left_B=0, right_A=0, ans;
for(i=0;i<len;i++){
if(s.charAt(i)=='A') right_A++
}
ans=right_A;
for(i=0;i<len;i++){
if(s.charAt(i)=='A') right_A--;
else left_B++
ans=Math.min(ans, right_A+left_B);
}
return ans
}