【春招笔试】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%内容,订阅专栏后可继续查看/也可单篇购买

互联网春秋招笔试题汇总 文章被收录于专栏

这里收集了超全的互联网春秋招笔试题,欢迎大家的订阅,会持续跟新的

全部评论
最后一题这样真的可以吗
点赞 回复 分享
发布于 08-01 11:51 江苏
第二题样例输入咋读的😧
点赞 回复 分享
发布于 08-19 14:23 上海

相关推荐

2 5 评论
分享
牛客网
牛客企业服务