题目
1.题目描述
给定一个单词,请问在单词中删除 t个字母后,能得到的字典序最小的单词是什么?
2.输入描述
输入的第一行包含一个单词,由大写英文字母组成。
第二行包含一个正整数 t。
其中,单词长度不超过 100100,t小于单词长度。
3.输出描述
输出一个单词,表示答案。
4.输入输出样例
LANQIAO
3
AIAO
代码
字典序是指从前到后比较两个字符串的大小。首先比较第一个字符,如果不同则第1个字符较小的字符串更小,如果相同则比较第2个字符……如此继续,来比较整个字符串的大小
s1:ABCDE
和 s2:ABCCE
两个字符串,s1的 D 比 s2的 C要更加大一点,所以s1 > s2。
字典序最小,只需要前面t位字母最小(删除前t位最大的),剩下的保留即可
首先将字符串转化为字符数组放入集合(放入集合是因为方便了后续的删除操作)
因为List集合的自动补位,只需要操作集合的0和1索引的位置即可,会转为ASCII码比较大小
import java.util.Scanner;
import java.util.ArrayList;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
int len = scan.nextInt();
//ArrayList可以自动补位
ArrayList<Character> strList = new ArrayList<Character>();
// string转化为char数组
char[] strChar = str.toCharArray();
//遍历加入集合
for(int i=0;i<strChar.length;i++){
strList.add(strChar[i]);
}
//删除字母的操作,for循环约定删除个数
for(int j=0;j<len;j++){
if(strList.get(0)>strList.get(1)){
strList.remove(0);
}else{
strList.remove(1);
}
}
//输出
for(int k=0;k<strList.size();k++){
System.out.print(strList.get(k));
}
scan.close();
}
}
总结
API | 说明 |
---|---|
str.toCharArray() | string转char数组 |
strList.add( ) | 将指定的元素追加到此集合的末尾 |
strList.remove() | 删除指定索引处的元素,返回被删除的元素 |
strLIst.size() | 返回集合中元素的个数 |
strList.get() | 获取指定索引处的元素 |