拓冰建站拓冰建站
首页 / 资讯中心 / 正文

华为机试 · 字符串专项 Python模板

华为机试 · 字符串专项 Python模板华为机试第一题几乎都是字符串重点分割、统计、替换、子串、回文、字符排序、进制、单词处理。搭配万能输入所有代码用 stdin print提交前删除调试打印。前置导入放代码最顶部importsysfromcollectionsimportCounter linessys.stdin.read().splitlines()1. 基础读取与清洗必背# 读取一行去掉首尾空白换行、空格、tabslines[0].strip()# 按空白分割成单词列表多个空格自动合并wordss.split()# 按指定分隔符分割例如逗号分割wordss.split(,)# 字符列表字符串不可变转列表方便修改char_listlist(s)# 字符列表转回字符串res.join(char_list)# 大小写转换s_lowers.lower()s_uppers.upper()# 判断是否是字母/数字c.isalpha()# 是否字母c.isdigit()# 是否数字c.isalnum()# 是否字母或数字2. 字符频次统计高频统计字母、数字出现次数# 方法1 Counter最简单机试首选slines[0].strip()cntCounter(s)# 取某个字符次数print(cnt[a])# 按出现次数降序输出前k个print(cnt.most_common(3))# 方法2 普通字典不导入collections也能用cnt{}forcins:ifcincnt:cnt[c]1else:cnt[c]13. 回文字符串判断经常单独出题defis_palindrome(s):# 直接反转比较returnss[::-1]# 双指针版本推荐适合需要自定义过滤字符场景defis_palindrome_two(s):l,r0,len(s)-1whilelr:ifs[l]!s[r]:returnFalsel1r-1returnTrue4. 字符串反转整体反转 / 单词反转# 整个字符串反转sabcderevs[::-1]print(rev)# 单词反转hello world → world helloslines[0].strip()wordss.split()words_revwords[::-1]ans .join(words_rev)print(ans)# 字符反转单词内部反转如hello → ollehdefreverse_word_inner(s):wordss.split()new_words[word[::-1]forwordinwords]return .join(new_words)5. 子串查找KMP一般不用华为简单题直接in / findslines[0].strip()subabc# 子串是否存在ifsubins:print(存在)# find返回起始下标找不到返回 -1idxs.find(sub)# rfind从右侧找idxs.rfind(sub)6. 提取数字 / 提取字母过滤字符slines[0].strip()# 只保留数字digits[cforcinsifc.isdigit()]num_str.join(digits)# 只保留字母letters[cforcinsifc.isalpha()]letter_str.join(letters)# 过滤掉空格no_space[cforcinsifc! ]7. 字符排序按ASCII排序 / 自定义排序高频slines[0].strip()# 按ASCII升序排序char_sortsorted(s)res.join(char_sort)# 案例字母优先数字放后面字母不区分大小写排序sa3B1cdefsort_key(c):ifc.isalpha():return(0,c.lower())else:return(1,c)res.join(sorted(s,keysort_key))print(res)8. 字符串替换 删除指定字符slines[0].strip()# 替换所有a为bs2s.replace(a,b)# 删除所有空格s2s.replace( ,)# 列表过滤删除指定字符适合多个要删除的字符ban{ ,#,!}res.join([cforcinsifcnotinban])9. 字符串压缩经典真题aabbbc → a2b3c1defstr_compress(s):ifnots:returnres[]pres[0]count1forcins[1:]:ifcpre:count1else:res.append(prestr(count))prec count1# 追加最后一组res.append(prestr(count))return.join(res)10. 最长无重复子串滑动窗口字符串中等题deflongest_no_repeat_substring(s):windowset()left0max_len0forrightinrange(len(s)):whiles[right]inwindow:window.remove(s[left])left1window.add(s[right])max_lenmax(max_len,right-left1)returnmax_len11. 多组字符串输入多行每行一个字符串linessys.stdin.read().splitlines()forlineinlines:sline.strip()ifnots:continue# 处理每一行字符串字符串机试高频坑考前必看split()不带参数自动分割任意空白不要写 split( )多个空格会产生空字符串字符串不可变修改操作要先转listjoin还原区分大小写题目没说忽略大小写不能随便 lower()首尾空格一定要strip()清理输入空字符串边界输入为空、只有空格要防止索引越界输出join拼接字符串输出不要逐个print字符容易换行混乱字符串选型速查表需求推荐模板统计字符频次Counter回文判断双指针 / s s[::-1]反转字符串/单词切片 s[::-1]过滤保留字母/数字列表推导式 isdigit/isalpha字符自定义排序sorted key子串查找in/ find字符串压缩一次遍历计数最长无重复子串滑动窗口 set要不要我给你一套华为字符串模拟真题带完整AC代码直接上机测试练习
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门