- 苏州大学计算机复试【字符串/数组类习题】
- PAT
- LeetCode
- 3. 无重复字符的最长子串
- 5. 最长回文子串
- 791. 自定义字符串排序
- 804. 唯一摩尔斯密码词
- 856. 括号的分数
- 890. 查找和替换模式
- 面试题 08.09. 括号
- 929. 独特的电子邮件地址
- 1170. 比较字符串最小字母出现频次
- 1071. 字符串的最大公因子
- 1221. 分割平衡字符串
- 1324. 竖直打印单词
- 1332. 删除回文子序列
- 1370. 上升下降字符串
- 1309. 解码字母到整数映射
- 1313. 解压缩编码列表
- 1408. 数组中的字符串匹配
- 788. 旋转数字
- 面试题 01.07. 旋转矩阵
- 78. 子集
- 13. 罗马数字转整数
- 12. 整数转罗马数字
- 59. 螺旋矩阵 II
- 1299. 将每个元素替换为右侧最大元素
- 1266. 访问所有点的最小时间
- 1329. 将矩阵按对角线排序 [数组, 遍历对角线]
苏州大学计算机复试【字符串/数组类习题】
PAT
1028 人口普查 (20分)
某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。
这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。
输入格式:
输入在第一行给出正整数 N,取值在(0,105];随后 N 行,每行给出 1 个人的姓名(由不超过 5 个英文字母组成的字符串)、以及按 yyyy/mm/dd
(即年/月/日)格式给出的生日。题目保证最年长和最年轻的人没有并列。
输出格式:
在一行中顺序输出有效生日的个数、最年长人和最年轻人的姓名,其间以空格分隔。
输入样例:
5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20
输出样例:
3 Tom John
代码:
# -*- coding: utf-8 -*-
def solve():
n = int(input())
count = 0
res = []
# datas = [('John', '2001/05/12'), ('Tom', '1814/09/06'), ('Ann', '2121/01/30'), ('James', '1814/09/05'), ('Steve', '1967/11/20')]
for i in range(n):
elem = input().split()
if '1814/09/06' <= elem[1] <= '2014/09/06':
res.append(elem)
count += 1
res.sort(key=lambda x:x[1])
if res:
print(count, res[0][0], res[-1][0])
else:
print('0')
solve()
1029 旧键盘 (20分)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式:
输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _
(代表空格)组成。题目保证 2 个字符串均非空。
输出格式:
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。
输入样例:
7_This_is_a_test
_hs_s_a_es
输出样例:
7TI
代码:
# -*- coding: utf-8 -*-
def solve():
right = input().lower()
wrong = input().lower()
s1, s2 = set(right), set(wrong)
out = list(s1 - s2)
output = [[right.index(letter), letter] for letter in out]
output.sort()
olen = len(output)
res = [str(output[i][1]) for i in range(olen)]
print(''.join(res).upper())
solve()
1078 字符串压缩与解压 (20分)
文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc
就用 5c
来表示。如果字符没有重复,就原样输出。例如 aba
压缩后仍然是 aba
。
解压方法就是反过来,把形如 5c
这样的表示恢复为 ccccc
。
本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串。
输入格式:
输入第一行给出一个字符,如果是 C
就表示下面的字符串需要被压缩;如果是 D
就表示下面的字符串需要被解压。第二行给出需要被压缩或解压的不超过 1000 个字符的字符串,以回车结尾。题目保证字符重复个数在整型范围内,且输出文件不超过 1MB。
输出格式:
根据要求压缩或解压字符串,并在一行中输出结果。
输入样例 1:
C
TTTTThhiiiis isssss a tesssst CAaaa as
输出样例 1:
5T2h4is i5s a3 te4st CA3a as
输入样例 2:
D
5T2h4is i5s a3 te4st CA3a as10Z
输出样例 2:
TTTTThhiiiis isssss a tesssst CAaaa asZZZZZZZZZZ
代码:
# -*- coding: utf-8 -*-
import re
def solve():
j = input()
if j == 'C': # 压缩
data = input()
data = [i+j for i,j in re.findall(r'([a-zA-Z\s])(\1*)', data)] # 注意:r''不能少
res = ''
for elem in data:
res += str(len(elem))+elem[0] if len(elem) > 1 else elem[0]
print(res)
else: # 解压
data = input()
data = re.findall('(\d*)([a-zA-Z\s])', data)
res = ''
for length, elem in data:
if length == '':
res += elem
else:
res += int(length)*elem
print(res)
solve()
1081 检查密码 (15分)
本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .
,还必须既有字母也有数字。
输入格式:
输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。
输出格式:
对每个用户的密码,在一行中输出系统反馈信息,分以下5种:
- 如果密码合法,输出
Your password is wan mei.
; - 如果密码太短,不论合法与否,都输出
Your password is tai duan le.
; - 如果密码长度合法,但存在不合法字符,则输出
Your password is tai luan le.
; - 如果密码长度合法,但只有字母没有数字,则输出
Your password needs shu zi.
; - 如果密码长度合法,但只有数字没有字母,则输出
Your password needs zi mu.
。
输入样例:
5
123s
zheshi.wodepw
1234.5678
WanMei23333
pass*word.6
代码:
# -*- coding: utf-8 -*-
import re
def solve():
n = int(input())
i = 0
for i in range(n):
# 密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 . ,还必须既有字母也有数字
pwd = input()
plen = len(pwd)
sign = re.findall('[^0-9a-zA-Z.]', pwd) # 存在不合法字符
num = re.findall('[0-9]', pwd) # 是否只有字母
alpha = re.findall('[a-zA-Z]', pwd) # 是否只有数字
if plen < 6:
print("Your password is tai duan le.")
elif sign:
print("Your password is tai luan le.")
elif num == []:
print("Your password needs shu zi.")
elif alpha == []:
print("Your password needs zi mu.")
else:
print("Your password is wan mei.")
solve()
1043 输出PATest (20分)
给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest....
这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。
输入格式:
输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
redlesPayBestPATTopTeePHPereatitAPPT
输出样例:
PATestPATestPTetPTePePee
代码:
# -*- coding: utf-8 -*-
def solve():
data = input()
dlen = len(data)
res = ''
pattern = 'PATest'
for i in range(dlen):
for m in patt