1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【面经】外企德科-华为精英研发项目-笔试编程题

【面经】外企德科-华为精英研发项目-笔试编程题

时间:2024-07-02 23:06:39

相关推荐

【面经】外企德科-华为精英研发项目-笔试编程题

微信搜索:编程笔记本。获取更多干货!

微信搜索:编程笔记本。获取更多干货!

点击上方蓝字关注我,我们一起学编程

欢迎小伙伴们分享、转载、私信、赞赏

今天来看一道“外企德科-华为精英研发项目”的一道笔试编程题。

求满足条件的最长字串的长度

题目描述:

给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串,字符串本身是其最长的子串,子串要求:

只包含 1 个字母(a-z, A-Z),其余必须是数字字母可以在子串中的任意位置

微信搜索:编程笔记本。获取更多干货!

微信搜索:编程笔记本。获取更多干货!

如果找不到满足要求的子串,如全是字母或全是数字,则返回 -1 。

输入描述:

字符串(只包含数字和字母)。

输出描述:

子串的长度。

示例:

输入:abC124ACb输出:4解释:C124124A

分析:

由于符合条件的子串有且仅有一个字母,因此我们可以统计每个字母出现的位置,相间一位的字母的位置决定了其包含的数字数量,这样问题就迎刃而解了。

参考代码:

微信搜索:编程笔记本。获取更多干货!

微信搜索:编程笔记本。获取更多干货!

#include <bits/stdc++.h>using namespace std;int main(){string s; // 出入的字符串cin >> s;int ans = -1;vector<int> pos; // 记录字母的位置pos.push_back(-1);for (int i = 0; i < s.size(); ++i) {if (isalpha(s[i])) {pos.push_back(i);}}pos.push_back(s.size());for (int i = 0; i < pos.size() - 2; ++i) {int diff = pos[i + 2] - pos[i];if (diff > 2) {ans = max(ans, diff - 1);}}cout << ans << endl;return 0;}

微信搜索:编程笔记本。获取更多干货!

微信搜索:编程笔记本。获取更多干货!

测试一些边界:

jincheng@haofan$ ./a.out123a4jincheng@haofan$ ./a.outa1234jincheng@haofan$ ./a.out123a1237jincheng@haofan$ ./a.outa123a4jincheng@haofan$ ./a.outaaa1aaa2jincheng@haofan$ ./a.outaaa-1jincheng@haofan$ ./a.out111-1jincheng@haofan$ ./a.out

可以看到,程序基本满足要求。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。