博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【面经】外企德科-华为精英研发项目-笔试编程题
阅读量:3924 次
发布时间:2019-05-23

本文共 1337 字,大约阅读时间需要 4 分钟。

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

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

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

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

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

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

题目描述:

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

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

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

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

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

输入描述:

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

输出描述:

子串的长度。

示例:

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

分析:

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

参考代码:

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

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

#include 
using namespace std;int main(){
string s; // 出入的字符串 cin >> s; int ans = -1; vector
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

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

你可能感兴趣的文章
P1165 日志分析
查看>>
Swing开发之JComboBox篇
查看>>
JVM内存的设置(解决eclipse下out of memory问题)
查看>>
sscanf 总结
查看>>
android图片特效处理之图片叠加
查看>>
windows 使用GetLocalTime 和GetSystemTime 所获得的时间不同
查看>>
Android进阶2之图片缩略图(解决大图片溢出问题)
查看>>
Android学习笔记进阶19之给图片加边框
查看>>
Android学习笔记进阶18之画图并保存图片到本地
查看>>
Android学习笔记进阶20之得到图片的缩略图
查看>>
Html制作漂亮表格
查看>>
android图片特效处理之怀旧效果
查看>>
android图片特效处理之锐化效果
查看>>
android图片特效处理之光晕效果
查看>>
JSP之JDBC操作Sql Server数据库
查看>>
Android学习笔记之RadioButton RadioGroup
查看>>
Android学习笔记进阶15之Shader渲染
查看>>
Java学习笔记之FreeTTS(语音)
查看>>
Android 给图片加边框
查看>>
获取JDBC中的ResultSet的记录的条数
查看>>