【春招笔试】2024-05-11-华为荣耀-三语言题解
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员
✨ 本系列打算持续跟新小米近期的春秋招笔试题汇总~
👏 感谢大家的订阅➕ 和 喜欢💗
✨ 笔试合集传送们 -> 🧷春秋招笔试合集
📷 01.K小姐的字符串分类
问题描述
K小姐是一位热爱编程的软件工程师,她最近在处理一批字符串数据时遇到了一些问题。这些字符串包含了合法和非法字符,合法字符包括数字(0-9)、小写字母(a-z)和大写字母(A-Z)。K小姐需要你帮助她编写一个程序,将这些字符串分类为合法字符串和非法字符串,并去除重复的合法字符串。
输入格式
输入包含多行,每行一个字符串。字符串的总数不超过 100,每个字符串的长度不超过 64。
输出格式
第一行输出所有合法且无重复的字符串,字符串之间用一个空格分隔。第二行输出所有非法的字符串,可能包含重复,同样用一个空格分隔。
样例输入
abc
def
151 1
acd123
44234tjg
aga'.
ad--s
abd
123
abcdef
1234567890123456789012345678901234567890123456789012345678901234
EDFG
SDFG
ABC
DEF
CCCC
a*b=1
样例输出
abc def acd123 44234tjg abd 123 abcdef 1234567890123456789012345678901234567890123456789012345678901234 EDFG SDFG ABC DEF CCCC
aga' ad--s a*b=1
数据范围
- 字符串数量不超过 100。
- 每个字符串长度不超过 64。
题解
本题主要考察字符串处理和集合的使用。首先,我们需要判断每个字符串是否为合法字符串。合法字符串只包含数字和字母。我们可以通过遍历字符串中的每个字符,检查它是否为字母或数字来完成这一判断。对于合法的字符串,我们使用一个集合来存储,以便去除重复项。对于非法的字符串,我们直接存入另一个列表。最后,按照题目要求输出这两个列表。
参考代码
参考代码
- Python
def process_strings():
import sys
input = sys.stdin.read
data = input().splitlines()
valid_set = set()
valid_list = []
invalid_list = []
for s in data:
if all(c.isalnum() for c in s):
if s not in valid_set:
valid_list.append(s)
valid_set.add(s)
else:
invalid_list.append(s)
print(" ".join(valid_list))
print(" ".join(invalid_list))
if __name__ == "__main__":
process_strings()
- Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Set<String> validSet = new HashSet<>();
List<String> validList = new ArrayList<>();
List<String> invalidList = new ArrayList<>();
while (scanner.hasNextLine()) {
String s = scanner.nextLine();
boolean isValid = true;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (!Character.isLetterOrDigit(ch)) {
isValid = false;
break;
}
}
if (isValid) {
if (!validSet.contains(s)) {
validList.add(s);
validSet.add(s);
}
} else {
invalidList.add(s);
}
}
for (int i = 0; i < validList.size(); i++) {
if (i > 0) System.out.print(" ");
System.out.print(validList.get(i));
}
System.out.println();
for (int i = 0; i < invalidList.size(); i++) {
if (i > 0) System.out.print(" ");
System.out.print(invalidList.get(i));
}
System.out.println();
scanner.close();
}
}
- Cpp
#include <iostream>
#include <set>
#include <vector>
#include <cctype>
using namespace std;
int main() {
set<string> validSet;
vector<string> validList, invalidList;
string s;
while (cin >> s) {
bool isValid = true;
for (char ch : s) {
if (!isalpha(ch) && !isdigit(ch)) {
isValid = false;
break;
}
}
if (isValid) {
if (validSet.find(s) == validSet.end()) {
validList.push_back(s);
validSet.insert(s);
}
} else {
invalidList.push_back(s);
}
}
for (int i = 0; i < validList.size(); i++) {
if (i > 0) cout << " ";
cout << validList[i];
}
cout << endl;
for (int i = 0; i < invalidList.size(); i++) {
if (i > 0) cout << " ";
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
互联网春秋招笔试题汇总 文章被收录于专栏
这里收集了超全的互联网春秋招笔试题,欢迎大家的订阅,会持续跟新的