- 【5键键盘的输出】有一个特殊的 5键键盘,上面有 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键。
- a键在屏幕上输出一个字母 a;
- ctrl-c将当前选择的字母复制到剪贴板;
- ctrl-x将当前选择的 字母复制到剪贴板,并清空选择的字母;
- ctrl-v将当前剪贴板里的字母输出到屏幕;
- ctrl-a 选择当前屏幕上所有字母。
- 注意:
- 1、剪贴板初始为空,新的内容被复制到剪贴板时会覆盖原来的内容
- 2、当屏幕上没有字母时,ctrl-a无效
- 3、当没有选择字母时,ctrl-c和 ctrl-x无效
- 4、当有字母被选择时,a和ctrl-v这两个有输出功能的键会先清空选择的字母,再进行输出
- 给定一系列键盘输入,输出最终屏幕上字母的数量。
- 输入描述:
- 输入为一行,为简化解析,用数字 12345代表 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键的输入,数字用空格分隔
- 输出描述:
- 输出一个数字,为最终屏目上字母的数量。
public void answer(String str){
String[] splitArr = str.split("");
List<Integer> list = new ArrayList<>();
List<Integer> tempList = new ArrayList<>();
boolean flag = false;
for (String s : splitArr) {
switch (s) {
//a
case "1":
list.add(1);
break;
//ctrl c
case "2":
if (flag) {
tempList = ctrlC(list);
flag = false;
}
break;
//ctrl x
case "3":
if (flag) {
tempList = ctrlX(list);
flag = false;
}
break;
//ctrl v
case "4":
ctrlV(list, tempList);
break;
//ctrl a
case "5":
flag = ctrlA();
}
}
System.out.println(list.size());
}
//这里的几个方法其实没啥必要,直接把方法的内容放到上面的case里也可以
public boolean ctrlA(){
return true;
}
public List<Integer> ctrlC(List<Integer> list){
return new ArrayList<>(list);
}
public void ctrlV(List<Integer> list, List<Integer> cList){
list.addAll(cList);
}
public List<Integer> ctrlX(List<Integer> list){
List<Integer> xList = new ArrayList<>(list);
list.clear();
return xList;
}