深圳网站设计公司行业,创建建站,智能网站建设模板售后,给网站添加代码腾讯音乐娱乐集团2023校园招聘技术类岗位编程题四
【牛客】4. 01串修改
给定一个只包含’0’和’1’两种字符的字符串#xff0c;每次操作可以选择相邻的两个字符#xff0c;将它们同时变成’0’或者同时变成’1’。请问最少多少次操作后#xff0c;所有的字符都相同…腾讯音乐娱乐集团2023校园招聘技术类岗位编程题四
【牛客】4. 01串修改
给定一个只包含’0’和’1’两种字符的字符串每次操作可以选择相邻的两个字符将它们同时变成’0’或者同时变成’1’。请问最少多少次操作后所有的字符都相同
示例1 输入例子“1001101” 输出例子2
题解
思路 字符串全变成0和全变成1俩种变法取二者较小。 以1001101为例ceil()为向上取整
全变成1把0去掉[00,0]需要ceil(“00”.length/2)ceil(“0”.length/2)全变成0把1去掉[1,11,1]需要ceil(“1”.length/2)ceil(“11”.length/2)ceil(“1”.length/2)二者取较小者
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) {//变为全为0int 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);//变为全为1int 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);}
}