Tencent Music Entertainment Group 2023 Campus Recruitment Technology Post Programming Question 4
[Niu Ke] Modificação de cordas 4.01
Dada uma string contendo apenas dois caracteres '0' e '1', cada operação pode selecionar dois caracteres adjacentes e transformá-los em ' 0 ' ou ' 1 ' ao mesmo tempo . Posso pedir o número mínimo de operações, todos os caracteres são iguais?
Exemplo 1
Exemplo de entrada: "1001101"
Exemplo de saída: 2
responder
Ideia: Mude todas as strings para 0 e todas para 1, o que for menor.
Tome 1001101 como exemplo: ceil() é arredondado para cima
- Todos se tornam 1, remova 0, [00,0], precisa de ceil(“00”.length/2)+ceil(“0”.length/2)
- Todos se tornam 0, remova 1, [1,11,1], precisa de ceil(“1”.comprimento/2)+ceil(“11”.comprimento/2)+ceil(“1”.comprimento/2)
- o que for menor
import java.util.Arrays;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int res = minOperations(in.next());
System.out.println(res);
}
public static int minOperations(String str) {
//变为全为0
int ans0 = 0;
String[] split0 = str.split("[0]+");//匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
System.out.println(Arrays.toString(split0));
for (int i = 0; i < split0.length; i++) {
//记录全变0次数
if (split0[i].length() % 2 == 0) {
ans0 += split0[i].length() / 2;
}
else {
ans0 += split0[i].length() / 2 + 1;
}
}
System.out.println(ans0);
//变为全为1
int ans1 = 0;
String[] split1 = str.split("[1]+");
System.out.println(Arrays.toString(split1));
for (int i = 0; i < split1.length; i++) {
if (split1[i].length() % 2 == 0) {
ans1 += split1[i].length() / 2;
} else {
ans1 += split1[i].length() / 2 + 1;
}
}
System.out.println(ans1);
return Math.min(ans0, ans1);
}
}