一、题目描述
定义字符串完全由“A’和B"组成,当然也可以全是"A"或全是"B。如果字符串从前往后都是以字典序排列的,那么我们称之为严格递增字符串。
给出一个字符串5,允许修改字符串中的任意字符,即可以将任何的"A"修改成"B,也可以将任何的"B"修改成”A,求可以使s满足严格递增的最小修改次数。0<s的长度<100000。
二、输入描述
输入一个宁符串:“AABBA”。
三、输出描述
修改最后一位得到AABBB。
四、解题思路
- 记录前一个位置的修改次数;
- 遍历字符数组chars,对每个字符进行判断;
- 如果当前字符是B,则表示需要将其修改为A,此时pre1+1;
- 如果为A,则表示需要将其修改为B,此时pre2更新为pre1和pre2中的较小值加1;
- 取pre1和pre2中的较小值,即为字符串满足严格递增的最小修改次数;
五、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
char[] chars = line.toCharArray();
// 1、记录前一个位置的修改次数
int pre1 = 0;
int pre2 = 0;
// 2、遍历字符数组chars,对每个字符进行判断
for (int i = 0; i < chars.length; i++) {
char currChar = chars[i];
int a = pre1;
int b = Math.min(pre1, pre2);
// 3、如果当前字符是B,则表示需要将其修改为A,此时pre1+1
if (currChar == 'B') {
a++;
}else {// 4、如果为A,则表示需要将其修改为B,此时pre2更新为pre1和pre2中的较小值加1
b++;
}
pre1 = a;
pre2 = b;
}
// 5、取pre1和pre2中的较小值,即为字符串满足严格递增的最小修改次数
int min = Math.min(pre1, pre2);
System.out.println(min);
}
六、效果展示
1、输入
AABBA
2、输出
1
🏆下一篇:华为OD机试真题 Java 实现【获得完美走位】【2023Q1 100分】
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。