解题思路:
       贪心算法
注意事项:
        在做算法优化时,可以考虑在删除元素时让索引退一,但是需要区分都不删除和中间删除,头部删除是不需要退一的,中间删除需要退一。
参考代码:

public static StringBuffer function1(String numString, int count) {
	StringBuffer sBuilder = new StringBuffer(numString); 
	int i=0;
	for(; i<sBuilder.length()-1 && count>0; i++) {
		if(sBuilder.charAt(i) > sBuilder.charAt(i+1)) {
			sBuilder.deleteCharAt(i);
			count--;
			i = i==0?i-1:i-2;  //当删除的数据是第一个元素时:i-1,否则i-2
			//原因是:头部元素删除时,i不变,中间数据删除时,i退一,但是由于存在for中的i++,所以需要先退1
		}	
	}

	if(i==sBuilder.length()-1 && count>0)  {		
		while (--count>=0){
			sBuilder.deleteCharAt(sBuilder.length()-1);
		} 
		while(sBuilder.charAt(0)=='0'&&sBuilder.length()>1) {
			sBuilder.deleteCharAt(0);
		}
	}
		
		return sBuilder;
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int t = scanner.nextInt();  //2
		for(int i=0; i<t; i++) {
			String numString = scanner.next();// 9128456
			int count = scanner.nextInt();  //2
			StringBuffer res = function1(numString, count);
			System.out.println(res);
		}
	}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论