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

说明

华为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()

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

(0)

相关推荐

  • 华为校园招聘上机笔试题 扑克牌大小(python)

    本文为大家分享了华为校园招聘上机笔试题,供大家参考,具体内容如下 [编程题] 扑克牌大小 时间限制:10秒 空间限制:131072K 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张. 牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):)  3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER  输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-&quo

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

    说明 华为2019在线笔试题,现整理如下,以供之后参考 GitHub 题目介绍 ################################################################# ################################################################# ''' 题目描述: -- 对输入字符串检查是否存在非法字符,输出合法字符串(去重)和非法字符串(不去重) -- 对合法字符串循环左移10次,在进行排序输出.

  • JS前端笔试题分析

    本文实例分析了JS前端笔试题.分享给大家供大家参考,具体如下: 1.如何根据逗号分隔的字符串创建数组呢?请为下面的字符串创建一个数组,并访问第三个元素:"cats,dogs,birds,horses" 知识点:数组和字符串的转换.考察split() 方法.把一个字符串分割成字符串数组(将字符串按某个字符切割成若干个字符串,并以数组形式返回) var animalString="cats,dogs,birds,horses"; var animalArray=anim

  • JS经典正则表达式笔试题汇总

    本文实例总结了JS经典正则表达式笔试题.分享给大家供大家参考,具体如下: 一.复习字符串的传统操作 如何获取一个字符串中的数字字符,并按数组形式输出,如 dgfhfgh254bhku289fgdhdy675gfh 输出[254,289,675] 分析:循环用charAt()的方法获取到每一个子字符串,判断他是不是在0~9之间,是就把他扔到准备好的数组里 var str="dgfhfgh254bhku289fgdhdy675gfh"; findNum(str); function fin

  • C语言八道笔试题精讲带你掌握指针

    目录 题目一 题目二 题目三 题目四 题目五 题目六 题目七 题目八 为了题目的准确性和我们一般学习过程中的习惯,这里所有的题目代码都是在 X86 环境(32 位平台)下运行的. 题目一 #include <stdio.h> int main() { int a[5] = { 1, 2, 3, 4, 5 }; int* ptr = (int*)(&a + 1); printf("%d,%d", *(a + 1), *(ptr - 1)); return 0; } /

  • C语言常见的指针笔试题解析

    目录 笔试题1 笔试题2 笔试题3 笔试题4 笔试题5 笔试题6 笔试题7 笔试题8 在我们学习指针之后,应该在实际应用中去理解和掌握它,毕竟实践才是检验真理的唯一标准,我们以后在找工作的过程中免不了会遇到与指针相关的试题,本篇文章可以帮助我们提前了解一些常见的指针考点.在学习这篇文章之前可以根据需要对指针进行简要复习. 注:本篇文章所有代码均在X86环境下运行. 笔试题1 #include <stdio.h> int main() { int a[5] = { 1,2,3,4,5 }; in

  • Spring,hibernate,struts经典面试笔试题(含答案)

    本文讲述了Spring,hibernate,struts经典面试笔试题及其参考答案.分享给大家供大家参考,具体如下: 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: ① . 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代

  • 基于C++的拼多多算法在线笔试题示例

    本文实例讲述了基于C++的拼多多算法在线笔试题.分享给大家供大家参考,具体如下: 最近在狼厂实习中,很久没做题了.秋招第一发, 拼多多...  四个简单题,看到有些人竟然觉得难? 我来降一发自己的RP,这题目觉得难的,如果你拿到比我好的Offer,我是不服气的.. 四个题...其实我也就写了40分钟吧..不过最后也没有满分, 390/400, 第三题不知道为嘛一直有10分过不了.. 更一下, 刚刚好像发现第三题...这个>号, 我写的是>= ....? 可是我看题目好像是 >= 呀...

  • 2021最新Android笔试题总结美团Android岗职能要求

    目录 Android开发面试的几部分 1.基础知识 Java部分: Android部分: 数据结构与算法: 计算机基础: 设计模式: 开源项目: 重点项目经历 技术以外的东西 自我驱动和追求 沟通和协作 我的面经总结 Android Java 计算机网络 数据结构及算法 题外话 优秀的战士需要出色的剑才能战斗.同样,在现代IT中,每个编码人员都需要最好的Android开发人员工具来提高他们的技能和效率.在Android应用程序开发这个残酷的竞争行业中,只有优秀的开发人员才能生存下去.您需要向客户

  • java String校招面试题过程详解

    面试题一:判断下列程序运行结果 package String_test; public class test_1 { public static void main(String[] args) { String str1 = "HelloWorld"; String str2 = "HelloWorld"; String str3 = new String("HelloWorld"); String str4 = "Hello&quo

随机推荐