华为笔试——在字符串中找出连续最长的数字串

华为笔试:找出字符串中连续最长数字串

描述

输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置)

本题含有多组样例输入。

数据范围:字符串长度 1≤𝑛≤200 1≤n≤200  , 保证每组输入都至少含有一个数字

输入描述:

输入一个字符串。1<=len(字符串)<=200

输出描述:

输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不要输出空格)。

示例1

输入:

abcd12345ed125ss123058789
a8a72a6a5yy98y65ee1r2

输出:

123058789,9
729865,2

说明:

样例一最长的数字子串为123058789,长度为9
样例二最长的数字子串有72,98,65,长度都为2

本题先得到所有数字字符串,再获得其中最长字符串的长度,再按顺序拼接。

while True:
    try:
        string=input()
        numstrlst=[]
        thisstr=''
        for ch in string:
            if ch.isalpha():
                if len(thisstr)>0:
                    numstrlst.append(thisstr)
                    thisstr=''
                continue
            elif ch.isdigit():
                thisstr+=ch
        if len(thisstr
### 华为笔试中与输入输出相关的编程或技术问题 华为笔试通常采用 ACM 模式,这意味着程序需要能够正确读取标准输入并按照指定格式输出结果。以下是关于如何处理输入输出的一些解题思路和技术要点: #### 1. **输入数据的处理** 在华为笔试中,输入通常是通过 `stdin` 提供的多组数据。为了高效地解析这些数据,可以使用以下方法: - 对于 C++ 和 Java 等语言,推荐使用高效的流操作来读取输入。 ```cpp // 使用 C++ 的快速 IO 方法 ios::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; vector<int> data(n); for (int i = 0; i < n; ++i) { cin >> data[i]; } ``` - Python 中可以直接利用内置函数 `input()` 来逐行读取输入,并将其转换为目标类型[^1]。 ```python import sys input_data = sys.stdin.read().splitlines() n = int(input_data[0]) values = list(map(int, input_data[1].split())) ``` #### 2. **输出数据的要求** 输出部分需要注意格式严格匹配题目要求。常见的输出形式包括单行字符串、整数列表或多行输出。 - 如果需要输出多个值在同一行,可以用空格分隔它们。 ```java System.out.println(String.join(" ", Arrays.toString(result))); ``` - 当涉及多组测试用例时,每组的结果应单独成行显示。 ```python results = [] t = int(input()) for _ in range(t): n = int(input()) result = solve_problem(n) results.append(str(result)) print("\n".join(results)) ``` #### 3. **常见输入输出陷阱及其规避策略** 一些典型的错误可能源于对输入输出细节的关注不足,比如忽略多余的空白字符或未按顺序打印结果。 - 处理大范围数值时防止溢出:对于某些极端情况下的大数据量运算,选择合适的数据结构和变量类型至关重要[^4]。 - 测试边界条件:确保算法能妥善应对最小值、最大值以及重复项等情况。 #### 4. **具体案例分析——字符匹配问题** 以一道具体的字符匹配为例,假设我们需要找出所有属于特定类别的对象实例名称。此过程涉及到构建映射表并将查询转化为图上的路径查找问题[^5]。 ```cpp #include <bits/stdc++.h> using namespace std; unordered_map<string, string> parentMap; unordered_set<string> instances; void buildRelations(const vector<tuple<string, string, string>>& relations){ for(auto &[child, relationType, parent] : relations){ if(relationType == "instanceOf"){ instances.insert(child); } parentMap[child] = parent; } } vector<string> findInstances(string targetClass){ set<string> matchingInstances; for(auto& inst : instances){ string currentInst = inst; while(parentMap.find(currentInst)!=parentMap.end()){ if(parentMap[currentInst]==targetClass){ matchingInstances.insert(inst); break; } currentInst = parentMap[currentInst]; } } return {matchingInstances.begin(), matchingInstances.end()}; } ``` 上述代码片段展示了如何建立父子关系链路并通过回溯寻找符合条件的所有子节点[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值