• 说明 ?

  • 华为2019在线笔试题,现整理如下,以供之后参考
  • ? GitHub
  • 题目介绍 ?

#####################################################################################################
#####################################################################################################
'''
题目描述:
--  对输入字符串检查是否存在非法字符,输出合法字符串(去重)和非法字符串(不去重)
--  对合法字符串循环左移10次,在进行排序输出。(举例:比如字符串"abc",循环左移一次的结果为"bca")
输入描述:
(1) 字符串中的字符集合为 '0'-'9','a'-'z','A'-'Z',其余为非法字符串(空字符串作为定界符),有非法字符的字符串被视为非法输入;
(2) 作为输入的字符串个数不超过100,每个字符串长度不超过64;
(3) 作为输入的连续空字符串(空格/制表符/回车/换行符)作为一个空格处理(作为定界符,字符串起始字符不能为空);
(4) 输入每行只有一个字符串
(5) 输入以空行结束
输出描述:
(1) 输出合法字符串并去重
(2) 输出所有非法字符串
(3) 对结果1的去重合法字符串循环左移10次
(4) 对结果3合法字符串字符串排序,按ASCII表字符从小到大顺序排序
注意事项:
--  每输入一个字符后用空格跟下一个字符串隔离,作为输出的所有字符串之间只能有一个空格(作为定界符);
示例1:
-- 输入
abc
def
==
acd123
44234tjg
aga'-=
ad--s
abd
123
abcdef
1234567890123456789012345678901234567890123
45678901234567890123
EDFG
SDFG
ABC
DEF
cccc
a*b=1
dd
87&&^
asdfas
234abc35
765rgfh4sd
1231
123
==
EDFG-- 输出
abc def acd123 44234tjg abd 123 abcdef 1234
5678901234567890123456789012345678901234567
8901234567890123 EDFG SDFG ABC DEF cccc dd
asdfas 234abc35 765rgfh4sd 1231
== aga'-= as--s a*b=1 87&&^ ==
bca efd 23acd1 234tjg44 bda 231 efabcd 1234
5678901234567890123456789012345678901234567
8901231234567890 FGED FGSD BCA EFD cccc dd
asasdf 4abc3523 765rgfh4sd 3112
1234567890123456789012345678901234567890123
45678901231234567890 231 234tjg44 23acd1 31
12 4abc3523 765rgfh4sd BCA EFD FGED FGSD as
asdf bca bda cccc dd efabcd efd
'''
  • 一些技巧 ✅

#####################################################################################################
#####################################################################################################
'''
NOTE:
# 注意输入时strip()、split()用法
# extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
# ord('a') 返回字符a的ASCII码
# index = [m.start() for m in re.finditer(' ',x)] 返回输入字符串中空格所在索引位置
# 字符串去重时,由于需要删除列表新加入的元素,而remove()只能移除列表中第一个匹配的元素,因此需要找到需去重的字符串索引
# 用pop(index),从后往前的弹出。由于在此期间存储字符串的列表长度在动态改变,而for循环不能动态改变数组长度,因此用while# split(str="",num=string.count(str)) 函数
# str_test = 'This\t\t is    a\t\t\t test for   split()'
# 输入:str_test.split()           # 默认分割(删除)所有的空字符,包括空格、换行(\n)、制表符(\t)等
# 输出:['This', 'is', 'a', 'test', 'for', 'split()']
# 输入:str_test.split('s')        # 分割所有的字符s
# 输出:['Thi', '\t\t i', '    a\t\t\t te', 't for   ', 'plit()']
# 输入:str_test.split('s',2)      # 分割前2个字符s
# 输出:['Thi', '\t\t i', '    a\t\t\t test for   split()']
'''
  • 具体代码 ?

import sys# 初始化输入
def input_init():string_list = []while True:line = sys.stdin.readline().rstrip('\n')        # 逐行读入,并去除行末的换行符if 0 == len(line):                              # 输入以空行结束,break语句较强应放在 continue语句前,不然会陷入死循环breakif len(line) > 64:                              # 每个字符串长度不超过64continueif len(string_list) > 100-1:                    # 输入字符串个数不超过100continueif (line.startswith(' ')) & (0 != len(line)):   # 输入字符串不能以空格开始continuetemp_str = line.split()                         # split(),默认分割(删除)所有的空字符,包括空格、换行(\n)、制表符(\t)等string_list.append(' '.join(temp_str))          # 输入的连续空字符串(空格/制表符/回车/换行符)作为一个空格处理return string_list# 保存合法字符串
def get_legal_string(string_list: list):number_ls = list("0123456789")letter_ls = list("abcdefghijklmnopqrstuvwxyz")up_letter_ls = []for letter in letter_ls:up_letter_ls.append(letter.upper())flag = int(0)legal_str = []for index in range(0, len(string_list)):temp_str = string_list[index]for ix in range(0, len(temp_str)):x = temp_str[ix]if (x in number_ls) | (x in letter_ls) | (x in up_letter_ls):# 合法字符串flag = 1else:flag = 0breakif flag:legal_str.append(temp_str)return legal_str# 去除列表中重复的字符串
def remove_repeat_string(string_list: list):remove_repeated_str = string_list.copy()ix = 0while True:temp_str = remove_repeated_str[ix]count = remove_repeated_str.count(temp_str)             # 统计重复字符串个数if ix == len(remove_repeated_str)-1:breakif count == 1:ix = ix + 1continuewhile count > 1:                                        # for循环不能动态改变数组长度,因此用whilecount = count - 1j = 1while True:need_remove = remove_repeated_str[-j]           # 反序遍历if temp_str == need_remove:#remove_repeated_str.remove(need_remove)    # 因为remove()只能移除列表中第一个匹配的元素pop_index = len(remove_repeated_str) - jremove_repeated_str.pop(pop_index)          # 删除指定索引位置元素(反序)breakelse:j = j + 1return remove_repeated_str# 保存非法字符串
def get_non_legal_string(raw_string_list: list, legal_string: list):non_legal_str = []for i in raw_string_list:if i in legal_string:continuenon_legal_str.append(i)return non_legal_str# 左移10次字符 10%len(str)
def shift_string(string_list: list):shift_string = []for shift_str in string_list:start = 10 % len(shift_str)shift_temp = ""shift_temp += shift_str[start:]shift_temp += shift_str[:start]shift_string.append(shift_temp)return shift_string# 输出字符串结果
def output_string(string_list: list):output = ""for str_ in string_list:output += str_ + " "print(output)def main():# 原始输入str_list = input_init()# 保存合法字符串legal_str = get_legal_string(str_list)# 保存非法字符串non_legal_str = get_non_legal_string(raw_string_list=str_list, legal_string=legal_str)# 保存合法字符串_去重remove_repeated_string = remove_repeat_string(legal_str)# 1.输出去重合法字符串output_string(remove_repeated_string)# 2.输出未去重的非法字符串output_string(non_legal_str)# 3.输出去重合法字符串左移10次后的结果shift_legal_str = shift_string(remove_repeated_string)output_string(shift_legal_str)# 4.输出对合法字符串字符串左移后排序,按ASCII表字符从小到大顺序排序shift_legal_str = sorted(shift_legal_str)output_string(shift_legal_str)if __name__ == '__main__':main()

华为2019校招笔试题之处理字符串(python版)相关推荐

  1. 百度2019校招笔试题

    百度2019校招笔试题 1. 探险安排 小明要为n个人计划一次火星的探险,其中一个重要的任务是为每个参与者安排食物.仓库里面有m个能用一天的食物包裹,每个食物包裹有不同的类型ai.每个人每天必须用且只 ...

  2. 【美团校招笔试题】去除字符串首尾空格,中间多个空格只保留一个

    要求: 这是本人参加美团校招在线考试笔试题,如果此行为违反了美团校招笔试题商业保密性,请与本人联系. 思路:用一个while循环扫描整个字符串,用pStart字符指针指向整个字符串首地址,如果遇到首部 ...

  3. 美团点评2019校招笔试题——前端开发方向(附答案)

    2019年美团点评前端开发岗位校招笔试题目,虽然不是最新的,但面试题万变不离其宗,掌握了想要考察的知识点才是重要的. 1.单选题 点击"计算"按钮后输出结果为( ) A 11.5 ...

  4. 字节跳动2019校招笔试题(后端开发)一

    题目描述 第一题:产品经理转程序员 c++版代码 测试用例可以通过 #include <iostream> #include <string> #include <vec ...

  5. 思特奇2019校招笔试题

    这里仅记录自己不会的哦,有需要的可以参考下哦 1Java接口的修饰符可以为(d) A.private        B.proected         C.final          D.abst ...

  6. 快手2019校招笔试题

    目的:分别从前面和后面开始找划分点,使得前面的数字之和 = 后面的数字之和 目标表述:sum( 前面m 个数 ) = sum( 后面n个数) s.t. m+n <= N(总个数) 变形:sum[ ...

  7. 搜狐畅游2019校招笔试题-游戏开发工程师(java)

    题目描述: 一组无序的自然数集合,由0,1,2,,,,n的数字和一个的数字X组成,请从集合中找出这个重复的数字X. 例子: 输入:1 2 3 1 4 输出:1 public class Main {p ...

  8. 巨人网络2019校招笔试题

    巨人网络笔试,游戏开发岗位.前面8个选择题,主要考的是基础,里面有一道SQL题.后面两道填空题,都是考的指针.两道问答题,第一个具体是什么,不记得了:第二个是考的Linux,列举常用Linux命令.最 ...

  9. 九月十月 阿里 百度 华为 校招笔试题

    九月迅雷,华为,阿里巴巴,最新笔试面试十题 8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的     i .每次从通里面 ...

  10. 深信服笔试题 php,2019深信服校招笔试题------木板接水

    2019深信服校招笔试题--木板接水 题目: 空地上竖立着n个从左到右排列的木板,它们可以把水挡住,但溢出最边上木板的水将会流到空地上.已知木板间距都是单位1,现给定每个木板的高度,请求出总共能接住的 ...

最新文章

  1. Libevent调用
  2. 开发日记-20190706 关键词 读书笔记 《Perl语言入门》Day 3
  3. 洛谷 P3368 【模板】树状数组 2
  4. C++离航篇——内存的申请释放
  5. [转载]Shell编程中的数组定义、遍历
  6. ACM程序设计基础(1)题解
  7. php 操作系统,PHP 处理文件和操作系统
  8. 整合 activiti 7 springcloud
  9. 电子签名的制作和使用
  10. ie html5缓存,ie缓存文件在哪,教您IE浏览器缓存文件在哪
  11. 软件理论基础学习笔记——模态逻辑(modal logic)
  12. iphone12绿色好看 ,相比被全民吐槽的蓝色,绿色是怎么做到零差评的
  13. VS Code运行C++程序的配置过程
  14. java版我的世界MITE怎么下_我的世界mite作弊图文教程
  15. stackoverflow无法注册解决方案
  16. 清华大学张长水教授:机器学习和图像识别(附视频、PPT下载)
  17. 视频超分:EDVR(EDVR: Video Restoration with Enhanced Deformable Convolutional Networks)
  18. Ubuntu 触摸板(touchpad) 右键失效
  19. 用通俗易懂的方式讲解:CatBoost 算法原理及案例
  20. 那些关于前端数据结构与算法

热门文章

  1. pdf免费在线解密方法(无需密码)
  2. 获取当前屏幕各种高度
  3. BFS算法 (python)
  4. 《Introduction To Modern Cryptography》读书笔记一
  5. 证件照怎么换底色?不用ps,Word就能一键更换红白蓝底色
  6. 一周小结(你不要小看业务)
  7. MWORKS应用案例 | 基于Modelica的射流管式电液伺服阀的建模仿真
  8. @MapperScan和@Mapper的使用
  9. 服务器接千兆无线网卡,用户吓跑!千兆宽带就是坑爹货:真相崩溃
  10. java中点击按钮读取和写入文件实现登录和注册