美的美少年计划25暑期实习笔试
三道水题。两个字符串处理,一个数据结构。因为报名Java后端开发
比赛只能用Java
写,对C++
选手来说不是很适应。
- 题目不知如何描述,看一个样例就明白了。
Input:
-A1: v1
B1: v2
B2: v3
C1: v4
-A2: v5
-A3: v6
B3: v7
C2: v8
#
Output:
-A1: v1
-A1-B1: v2
-A1-B2: v3
-A1-B2-C1: v4
-A2: v5
-A3: v6
-A3-B3: v7
-A3-B3-C2: v8
#
遇到#
结束,总之就是字符串操作,注意缩进是4个空格而非一个制表符。
Code:
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[] head = new String[2333];
while (in.hasNext()) {
String line = in.nextLine();
if (line.equals("#")) {
break;
}
String[] items = line.split(":");
if (items[0].charAt(0) == '-') {
head[0] = items[0];
System.out.println(head[0] + ":" + items[1]);
}
else {
String cuti = items[0].replaceAll(" ", "");
int cnt = items[0].length() - cuti.length();
head[cnt / 4] = "-" + cuti;
for (int i = 0; i <= cnt / 4; ++i) {
System.out.print(head[i]);
}
System.out.println(":" + items[1]);
}
}
System.out.println("#");
in.close();
}
}
- 给一个字符串和一个整数n,将字符串每n个字符输出一个
,
,最后如果不足n个则补0
。此外,需要检查字符串是否只由小写字符组成,n是否大于0。如果不满足则直接输出ERROR
。
Input:
ccggpka 3
Output:
ccg,gpk,a00
Code:
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String s = in.next();
int n = in.nextInt();
boolean f = n > 0;
for (int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
if (c < 'a' || c > 'z') {
f = false; break;
}
}
if (!f) {
System.out.println("ERROR");
break;
}
for (int i = 0; i < s.length(); ++i) {
System.out.print(s.charAt(i));
if (i % n == n - 1 && i != s.length() - 1) System.out.print(",");
}
if (s.length() % n > 0) for (int i = 0; i < n - s.length() % n; ++i) System.out.print("0");
}
in.close();
}
}
- 给一个字符串,求其不含重复字符的子串最大长度。这题我实现的复杂度是
O(n)
,但感觉有简单写法。
Input:
abcdebfg
Output:
6
Hide:
// cdebfg
Code:
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.next();
int[] q = new int[1123456];
boolean[] st = new boolean[260];
int hh = 0, tt = -1, res = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!st[c]) {
q[++tt] = c;
st[c] = true;
}
else {
while (hh <= tt && q[hh] != c) {
st[q[hh]] = false;
hh++;
}
}
res = Math.max(res, tt - hh + 1);
}
System.out.println(res);
in.close();
}
}
以上代码均为参考代码
。