Lazy loaded image
算法练习
记录-华为机试(四)
字数 2634阅读时长 7 分钟
2025-7-27
2025-7-29
AI智能摘要
GPT
这里是萌新AI,这篇文章介绍了华为机试中的五道算法题,重点解析了第一题“简单错误记录”。作者首先概述了题目要求:处理文件报错信息,提取文件名(保留最后 16 个字符)和行号,统计相同错误并以首次出现为准,最终输出最多 8 条记录。接着,提供了解决思路:使用字典存储键值对(文件名和行号拼接为键,出现次数为值),并在输入结束后输出字典的最后 8 项。文章鼓励日常练习,并邀请读者分享方法。
URL
type
status
date
slug
summary
tags
category
icon
password
😀
日常练习算法题!每天至少做一道算法题,上不封顶都会记录下来!伙伴们有好的方法可以在评论区留言!

📝 算法题

第一题:简单错误记录

描述:

在本题中,我们需要处理文件报错信息,其由出错文件的文件路径和错误行号组成。文件路径的前三个字母为大写字母
A-Z、冒号":"和反斜杠,代表盘符;随后是若干由小写字母构成的字符串,代表文件夹名,彼此使用单个反斜杠间隔。路径的最后一个反斜杠后是文件名。我们只在乎文件名(即去掉除了文件名以外的全部信息),且至多保留文件名的最后
16个字符。随后,我们需要统计相同的报错信息:
  • 如果两条报错信息保留后16个字符后的文件名相同,且行号相同,则视为同一个报错;
  • 相同的报错信息以第一次出现的时间为准,至多输出最后8条记录。

输入描述:

本题将会给出1≦T≦100条报错信息,确切数字未知,您需要一直读入直到文件结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每条报错信息描述如下:在一行上先输入一个长度为 1≦length(x)≦100的字符串x代表文件路径;随后,在同一行输入一个整数y(1≦y≦1000)代表行号。文件路径的格式如题干所述,保证文件名不为空。

输出描述:

至多八行,每行先输出一个长度为1≦length(s)≦16的字符串s,代表文件名;随后,在同一行输出错误行号、报错次数。

解决方法:

思路:建立字典,通过字典存储信息。首先,拆分输入数据,将文件名和行号拼接作为Key值,出现的次数作为Value值。接着,循环输入截止后,取字典最后8位输出。

第二题:密码验证合格程序

描述:

你需要书写一个程序验证给定的密码是否合格。合格的密码要求:
  • 长度不少于8位
  • 必须包含大写字母、小写字母、数字、特殊字符中的至少三种
  • 不能分割出两个独立的、长度大于2的连续子串,使得这两个子串完全相同;更具体地,如果存在两个长度大于2的独立子串s1,s2 ,使得s1=s2,那么密码不合法。
子串为从原字符串中,连续的选择一段字符(可以全选、可以不选)得到的新字符串。
可见字符集为ASCII码在33到126范围内的可见字符。您可以参阅下表获得其详细信息(您可能关注的内容是,这其中不包含空格、换行)。

输入描述:

本题将会给出1≦T≦10组测试数据,确切数字未知,您需要一直读入直到文件结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每组测试数据描述如下:在一行上输入一个长度为1≦length(s)≦100,由可见字符构成的字符串s,代表待判断的密码。

输出描述:

对于每一组测试数据,新起一行。若密码合格,输出OK,否则输出NG。

解决方法:

思路:根据题目描述,我们将密码检查情况分为三种情况。首先,密码长度;接着,密码字串;最后,密码的不同字符总数(这里用到了正则表达式)。

第三题:简单密码

描述:

规定这样一种密码的变换方法:
  • 对于密码中的小写字母,参考九键手机键盘,将它们映射为对应的数字,具体地,abc对应数字 2、def对应数字3、ghi对应数字4、jkl对应数字5、mno对应数字6、pqrs对应数字7、tuv对应数字8、wxyz对应数字9;
  • 对于密码中的大写字母,先将其转换为小写,然后向后移动一位,即Z转换为a,A转换为b,B转换为c,⋯,Y转换为z,Z转换为a。
  • 对于密码中的数字,保持不变。现在,请你将给定的密码按照上述规则进行变换。

输入描述:

在一行上输入一个长度为 1≦length(s)≦1001≦length(s)≦100 的字符串 ss ,代表给定的密码。

输出描述:

在一行上输出一个字符串,代表变换后的密码。

解决方法:

思路:最主要处理的是小写字母。博主讲九宫格键盘转换为两个List集合,分别为lowerNum和num。那么,lowerNum代表的是键盘字符区间,num代表的是索引。num的前两个元素相同。其作用:防止ASCII码与lowerNum元素对比导致越界。大家可以删除掉第一个元素,进行实操一下。

第四题:汽水瓶

描述:

某商店规定:三个空汽水瓶可以换一瓶汽水,允许向老板借空汽水瓶(但是必须要归还)。小张手上有n个空汽水瓶,她想知道自己最多可以喝到多少瓶汽水。

输入描述:

本题将会给出1≦T≦10组测试数据,确切数字未知,您需要一直读入直到特定的结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每组测试数据描述如下:在一行上输入一个整数n(0≦n≦100),代表小张手上的空汽水瓶数量。特别地,n=0代表输入结束,您只需要立即退出,不需要针对这种情况进行处理。

输出描述:

对于每一组测试数据,新起一行。输出一个整数,代表小张最多可以喝到的汽水数量。

解决方法:

思路:博主通过递归函数解决该问题。在递归函数中只需要注意瓶子数为2和小于2时怎么处理即可。

第五题:删除字符串中出现次数最少的字符

描述:

对于给定的仅由小写字母构成的字符串,删除字符串中出现次数最少的字符。输出删除后的字符串,字符串中其它字符保持原来的顺序。特别地,若有多个字符出现的次数都最少,则把这些字符都删除。

输入描述:

在一行上输入一个长度为 1≦length(s)≦20,仅由小写字母构成的字符串s,代表待处理的字符串。

输出描述:

在一行上输出一个字符串,代表删除后的答案。保证这个字符串至少包含一个字符。

解决方法:

思路:首先,博主使用Pyton自带的API:collections,将字符串转换为字典;接着,获取最小值;再接着,获取满足最小值的字符;最后,替换空字符。博主的代码没有考虑最小和最大个数相等时怎么处理!伙伴们可以自行补充!

📎 算法题原网址

💡
以上便是今天的算法练习,如果伙伴们有好的方法,可以在下方评论区留下你们的方法!
 
上一篇
记录-华为机试(三)
下一篇
记录-华为机试(五)

评论
Loading...