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


Posted in Python onJune 25, 2019

华为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语句前,不然会陷入死循环
  break
 if len(line) > 64:    # 每个字符串长度不超过64
  continue
 if len(string_list) > 100-1:   # 输入字符串个数不超过100
  continue
 if (line.startswith(' ')) & (0 != len(line)): # 输入字符串不能以空格开始
  continue
 temp_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 = 1
  else:
  flag = 0
  break
 if flag:
  legal_str.append(temp_str)
 return legal_str


# 去除列表中重复的字符串
def remove_repeat_string(string_list: list):
 remove_repeated_str = string_list.copy()
 ix = 0
 while True:
 temp_str = remove_repeated_str[ix]
 count = remove_repeated_str.count(temp_str)  # 统计重复字符串个数
 if ix == len(remove_repeated_str)-1:
  break
 if count == 1:
  ix = ix + 1
  continue
 while count > 1:     # for循环不能动态改变数组长度,因此用while
  count = count - 1
  j = 1
  while 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) - j
   remove_repeated_str.pop(pop_index)  # 删除指定索引位置元素(反序)
   break
  else:
   j = j + 1
 return 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:
  continue
 non_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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python实现下载网易云音乐的高清MV
Mar 16 Python
python自定义解析简单xml格式文件的方法
May 11 Python
用生成器来改写直接返回列表的函数方法
May 25 Python
python安装numpy&安装matplotlib& scipy的教程
Nov 02 Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 Python
解决python大批量读写.doc文件的问题
May 08 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
python定时检测无响应进程并重启的实例代码
Apr 22 Python
python 实现从高分辨图像上抠取图像块
Jan 02 Python
Python如何读取文件中图片格式
Jan 13 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
Jan 20 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
Jun 24 #Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
Jun 24 #Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 #Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
Jun 24 #Python
python二维码操作:对QRCode和MyQR入门详解
Jun 24 #Python
详解python编译器和解释器的区别
Jun 24 #Python
python爬虫之自制英汉字典
Jun 24 #Python
You might like
PHP 截取字符串 分别适合GB2312和UTF8编码情况
2009/02/12 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
javascript实现的网页局布刷新效果
2008/12/01 Javascript
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
bootstrap table 表格中增加下拉菜单末行出现滚动条的快速解决方法
2017/01/05 Javascript
bootstrap警告框示例代码分享
2017/05/17 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
vue中监听返回键问题
2019/08/28 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
python之Character string(实例讲解)
2017/09/25 Python
深入理解Django的自定义过滤器
2017/10/17 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
Python大批量搜索引擎图像爬虫工具详解
2020/11/16 Python
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
工程师自我评价怎么写
2013/09/19 职场文书
军训个人总结
2015/03/03 职场文书
投资申请报告
2015/05/19 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
2016年党员干部公开承诺书
2016/03/24 职场文书
前端JavaScript大管家 package.json
2021/11/02 Javascript
Python接口自动化之文件上传/下载接口详解
2022/04/05 Python