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,将字符串转换为字典;接着,获取最小值;再接着,获取满足最小值的字符;最后,替换空字符。博主的代码没有考虑最小和最大个数相等时怎么处理!伙伴们可以自行补充!
📎 算法题原网址
以上便是今天的算法练习,如果伙伴们有好的方法,可以在下方评论区留下你们的方法!
- 作者:不爱吃香菜的萌新
- 链接:https://hexo.levsongsw.com//algorithm/huaweial4
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。



