前言:本次机试题目总体水平不难,但我还记录下自己的成长吧
大体记不住了,只记得第一题和第三题简单点,第二题我到现在还没看懂题意,后期会补充
1、去重(这个是在hr给的往届题有)
od历年真题:http://www.amoscloud.com/?cat=57
(我真不知道od是外包,但是考研调剂失败后,第一次投,有回复就先去试试水)
问题详情
游戏规则:
输入一个只包含英文字母的字符串,
字符串中的两个字母如果相邻且相同,就可以消除。
在字符串上反复执行消除的动作,
直到无法继续消除为止,此时游戏结束。
输出最终得到的字符串长度.
输入描述:
输入原始字符串str
只能包含大小写英文字母,字母的大小写敏感,
str长度不超过100
输出描述
输出游戏结束后,最终得到的字符串长度
示例一:
输入
gg
输出
0
说明 gg可以直接消除 得到空串 长度为0
示例2
输入:
mMbccbc
0123456
输出
3
0
说明mMbccbc中 可以先消除cc 此时变为mMbbc
再消除 bb 此时变成mMc
此时没有相同且相邻的字符 无法继续消除
最终得到字符串mMc 长度为3
备注:
输入中包含非大小写英文字母时
均为异常输入
直接返回0
通过100%的答案
/**
* Created with IntelliJ IDEA.
*
* @author 广大菜鸟
* @date 2022/5/16
* @Time 13:58
* E-mail: 1456084073@qq.com
*/
import java.util.*;
public class Main {
public static void main(String[]args){
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine().trim();
scanner.close();
if(line.replaceAll("[a-zA-Z]","").length()>0){
System.out.println(0);
return;
}
List<Character>lst = new ArrayList<>();
for(char ch:line.toCharArray()){
lst.add(ch);
}
for(int i=0;i<lst.size();){
if(i+1<lst.size() && lst.get(i).equals(lst.get(i + 1))){
lst.remove(i+1);
lst.remove(i);
i -= 1;
i = Math.max(0,i);
}else{
i++;
}
}
System.out.println(lst.size());
}
}
2、顺子
顺子:由至少 5 张由小到大连续递增 的扑克牌组成,不能有大小王、2 。
这个答案应该不对(16%)
/**
* Created with IntelliJ IDEA.
*
* @author 广大菜鸟
* @date 2022/5/16
* @Time 13:58
* E-mail: 1456084073@qq.com
*/
import java.util.*;
import java.util.stream.Collectors;
public class Main {
private static HashMap<String, Integer> map = null;
public static void main(String[]args) {
Scanner scanner = new Scanner(System.in);
List<String>inHand = Arrays.stream(scanner.nextLine().trim().split("-"))
.collect(Collectors.toList());
List<String>hasPass = Arrays.stream(scanner.nextLine().trim().split("-"))
.collect(Collectors.toList());
scanner.close();
initRole();
//规则:顺子:不能有大小王、2
while(inHand.contains("2")) {
inHand.remove("2");
}
while (inHand.contains("B")){
inHand.remove("B");
}
while (inHand.contains("C")){
inHand.remove("C");
}
//逆序
inHand.sort((o1,o2)-> map.get(o2) - map.get(o1));
hasPass.sort((o1,o2)-> map.get(o2) - map.get(o1));
int lenOfInHand = inHand.size();
int lenOfHasPass = hasPass.size();
if(lenOfInHand<lenOfHasPass){
System.out.println("NO-CHAIN");
return;
}
String otherHighCode = hasPass.get(0);
int otherHighScore = map.get(otherHighCode);
List<String>stringList = new ArrayList<>();
for (String myHighCode : inHand) {
if (otherHighScore >= map.get(myHighCode)) {
break;
}
stringList.add(myHighCode);
}
if(stringList.size()==0){
System.out.println("NO-CHAIN");
return;
}
StringBuilder sb = new StringBuilder();
for(int i=stringList.size()-1;i>=0;i--){
sb.append(stringList.get(i)).append("-");
}
System.out.println(sb.substring(0,sb.length()-1));
}
private static void initRole (){
map = new HashMap<>(15);
int i,k=0;
for(i=3;i<=10;i++){
map.put(i+"", k++);
}
map.put("J", k++);
map.put("Q", k++);
map.put("K", k++);
map.put("A", k++);
map.put("2",k++);
map.put("B",k++);
map.put("C",k);
}
}
3、还原字符串
大致题意是 3[a] 还原成aaa
通过100%的答案
/**
* Created with IntelliJ IDEA.
*
* @author 广大菜鸟
* @date 2022/5/16
* @Time 13:58
* E-mail: 1456084073@qq.com
*/
import java.util.*;
public class Main {
public static void main(String[]args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine().trim();
scanner.close();
System.out.println(solution(line));
}
private static String solution(String line) {
int s = line.indexOf("[");
if(s==-1){
return line;
}
Deque<Integer>deque = new ArrayDeque<>();
for(int i=0;i<line.length();i++){
if(line.charAt(i)=='['){
deque.addFirst(i);
}
else if(line.charAt(i)==']'){
s = deque.pop();
int e = i;
int num ;
StringBuilder numSb = new StringBuilder();
int j;
for(j=s-1;j>=0;j--){
if(Character.isDigit(line.charAt(j))){
numSb.append(line.charAt(j));
}else{
break;
}
}
num = Integer.parseInt(numSb.reverse().toString());
String newString = addSameString(line.substring(s+1, e), num);
line = line.substring(0, j+1) + newString + line.substring(i+1);
i = j+newString.length();
}
}
return line;
}
private static String addSameString(String str,int digit){
StringBuilder sb = new StringBuilder();
for(int i=0;i<digit;i++){
sb.append(str);
}
return sb.toString();
}
}