java同学看这里
import java.io.BufferedInputStream;
import java.util.Scanner;
public class Main {
/**
*
* @param num 输入字符串表示的整数
* @param k 移除k位数字
* @return 剩下的最小的字符串
*/
public static String removeKDigits(StringBuilder num, int k) {
StringBuilder res = new StringBuilder();
//开一个字符串保存最后结果
res.append('0');
/**
* 遍历num,每次把当前位加入res结果串,
* 如果res当前加入的数比上一次加入的数小
* 就删掉res的最后一位(可以简单理解为上一位)
*/
for (int i = 0; i < num.length(); i++) {
while (k != 0 && num.charAt(i) < res.charAt(res.length() - 1)) {
res.deleteCharAt(res.length() - 1);
k--;
}
res.append(num.charAt(i));
}
/**
* 如果执行完上面的循环,还没有删完k个数
* 则说明num中有连续的一段是升序的,这段的长度大于k
*/
while (k-- != 0) {
res.deleteCharAt(res.length() - 1);
}
/**
* 删除所有的先导0
*/
k = 0;
while (k + 1 < res.length() && res.charAt(k) == '0') {
k++;
}
return res.substring(k);
}
public static void main(String[] args) {
//读入num和k
Scanner sc = new Scanner(new BufferedInputStream(System.in));
String num = sc.nextLine();
StringBuilder num2 = new StringBuilder(num);
int k = sc.nextInt();
System.out.println(removeKDigits(num2,k));
}
}
Java StringBuffer 和 StringBuilder 类
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。