[Niu Ke] Modificação de cordas 4.01

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);
    }
}

Acho que você gosta

Origin blog.csdn.net/qq_44033208/article/details/131883982
Recomendado
Clasificación