Files
leetcode-master/problems/kamacoder/0144.字典序最小的01字符串.md
programmercarl 2d9604baa5 Update
2024-07-26 11:35:38 +08:00

1.5 KiB
Raw Blame History

0144.字典序最小的01字符串

贪心思路:移动尽可能 移动前面的1 ,这样可以是 字典序最小

从前到后遍历,遇到 0 ,就用前面的 1 来交换

#include <iostream>
#include <string>
using namespace std;
int main() {
    int n,k;
    cin >> n >> k;
    string s;
    cin >> s;
    for(int i = 0; i < n && k > 0; i++) {
        if(s[i] == '0') {
            // 开始用前面的 1  来交换
            int j = i;
            while(j > 0 && s[j - 1] == '1' && k > 0) {
                swap(s[j], s[j - 1]);
                --j;
                --k;
            }
        }
    }
    cout << s << endl;
    return 0;
}

Java


import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        scanner.nextLine(); // 消耗掉换行符
        String s = scanner.nextLine();
        char[] ch = s.toCharArray();

        for (int i = 0; i < n && k > 0; i++) {
            if (ch[i] == '0') {
                // 开始用前面的 1 来交换
                int j = i;
                while (j > 0 && ch[j - 1] == '1' && k > 0) {
                    char tmp = ch[j];
                    ch[j] = ch[j - 1];
                    ch[j - 1] = tmp;
                    j--;
                    k--;
                }
            }
        }

        System.out.println(new String(ch));
    }
}