华为机试笔记
通用知识点
无限循环输入框架
while True:
try:
except:
break
将输入字符串按空格分割成字符串数组
ss = input().split()
在数组中循环,i 是数组元素本身
for i in dict:
将输入的字符串反转
input()[::-1]
求int型正整数在内存中存储时 1 的个数,即转化为二进制表示
bin(int(input())).count('1')
把空字符''作为分隔符(注意不是空格),将列表元素用这个分隔符连在一起,因为是空字符,所以是直接连在一起
''.join(sorted(input()))
对输入的字符串进行四则运算,把所有括号统一换成(),再给eval()处理,直接处理字符串
eval(input().replace('{','(').replace('}',')').replace('[','(').replace(']',')'))
filter()接受一个函数和一个可迭代对象,将可迭代对象中的元素传递给函数
如果返回True则保留,返回False则过滤掉
list(filter(lambda x: x < a, [6, 28, 496, 8128]))
if else语句集成
print(int(a) + 1 if a % 1 >= 0.5 else int(a))
set()转化为集合,去除重复字符,配合len可以知道字符种类数
len(set(input()))
判断字符
i.isupper() #是否大写
i.isalpha() #是否字母
i == " " #是否空格
i.isdigit(): #是否数字
查找兄弟单词
描述
兄弟单词为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。
兄弟单词要求和原来的单词不同。例如:ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。
现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?
注意:字典中可能有重复单词。
数据范围:1≤n≤1000,输入的字符串长度满足 1≤len(str)≤10,1≤len(str)≤10,1≤k<n
输入描述:
输入只有一行。 先输入字典中单词的个数 n,再输入 n 个单词作为字典单词。 然后输入一个单词 x 最后后输入一个整数 k
输出描述:
第一行输出查找到 x 的兄弟单词的个数 m
第二行输出查找到的按照字典顺序排序后的第 k 个兄弟单词,没有符合第 k 个的话则不用输出。
示例
输入:
3 abc bca cab abc 1
输出:
2
bca
输入:
6 cab ad abcd cba abc bca abc 1
输出:
3
bca
答案
while True:
try:
ss = input().split() #将输入字符串按空格分割成数组,元素依然为字符串
n = int(ss[0]) #把第1个数字提取出来
dict = ss[1 : n + 1] #字典
s = ss[-2] #单词本体
m = int(ss[-1]) #提取最后1个数字
a = [] #兄弟单词
for i in dict: #在数组中循环,i是数组元素本身
if len(i) == len(s) and i != s and sorted(i) == sorted(s):#长度一样、不相同、排序后一样
a.append(i) #添加进兄弟单词
print(len(a))
if a and m <= len(a):
print(sorted(a)[m - 1]) #直接输出排序后第m个兄弟单词,sorted()自动字典排序
except:
break