- 一、只出现一次的字符
- 其他:round(XXX,1)
- 忽略大小写比较字符串大小
- 字符串几个可以使用的函数
- 二、去掉多余的空格
- 写法一:
- 写法二:
- 三、信息加密
- 写法一:
- 写法二:
- 写法三:自己的写法
- 四、单词替换
- 五、倒排单词
- 写法一:
- 写法二:
- *
- 写法三:
- [::-1]
- 六、字符串移位包含问题
- 写法一:我自己的写法哈哈哈
- 写法二:
- 写法三:
- 七、字符串乘方
- 写法一:
- 写法二:
- 写法三:
- from collections import Counter
- 八、字符串最大跨度
- 写法一:
- 写法二:
- rfind
- 九、最长公共字符串后缀
已经完成了一部分字符串的题目,在前面的一篇文章里面,本来以为这一部分应该算是基础部分,但其实感觉字符串中会有很多用法我都不太会,所以专门在做一节。
一、只出现一次的字符
res.get(i, False) 是在字典 res 中查找键为 i 的值,如果找到了返回对应的值,否则返回 False
s=input()
res={}
for i in s:
if res.get(i,False):
res[i]=res[i]+1
else:
res[i]=1
for i in res:
if res[i]==1:
print(i)
exit()
print("no")
其他:round(XXX,1)
这行代码的作用是将XXX四舍五入保留一位小数。
忽略大小写比较字符串大小
字符串几个可以使用的函数
str = "www.runoob.com"
print(str.upper()) # 把所有字符中的小写字母转换成大写字母
print(str.lower()) # 把所有字符中的大写字母转换成小写字母
print(str.capitalize()) # 把第一个字母转化为大写字母,其余小写
print(str.title()) # 把每个单词的第一个字母转化为大写,其余小写
s1,s2=input().lower(),input().lower()
if s1==s2:
print("=")
elif s1>s2:
print(">")
elif s1<s2:
print("<")
二、去掉多余的空格
写法一:
print(" ".join(input().split()))
写法二:
for s in input().split():
print(s, end = ' ')
三、信息加密
写法一:
chr()是一个Python内置函数,它将一个整数作为参数,并返回对应于该整数的ASCII / Unicode字符。
for c in input():
if c >= 'a' and c <= 'z' or c >= 'A' and c <= 'Z':
if ord(c) + 1 == ord('z') + 1 or ord(c) + 1 == ord('Z') + 1:
c = chr(ord(c) - 25)
else:
c = chr(ord(c) + 1)
print(c, end = '')
for c in input():
if c.isalpha():#判断是不是字母
if ord(c) + 1 == ord('z') + 1 or ord(c) + 1 == ord('Z') + 1:
c = chr(ord(c) - 25)
else:
c = chr(ord(c) + 1)
print(c, end = '')
写法二:
data = {}
t = [chr(97+i) for i in range(26)]
for i in range(len(t)-1):
data[t[i]] = t[i+1]
data['z'] = 'a'
# print(data)
res = ''
for i in input():
if data.get(i,False):
res += data[i]
elif data.get(i.lower(),False):
res += data[i.lower()].upper()
else:
res+= i
print(res)
写法三:自己的写法
我是不是掌握了?哈哈哈
s=input()
for i in s:
if i=="z":i="a"
elif i=='Z':i="A"
elif i.isalpha():
i=chr(ord(i)+1)
print(i,end='')
四、单词替换
s,a,b=input(),input(),input()
for t in s.split():
if t==a:
print(b,end=" ")
else: print(t,end=" ")
五、倒排单词
写法一:
l=list(input().split())
l.reverse()
for i in l:
print(i,end=' ')
写法二:
*
’*‘ 号是 Python 的一个语法,用于解包列表或元组,将其拆分为一个个单独的变量。这里将列表中的所有元素解包成独立的字符串,传入 print() 函数中。
print(*reversed(input().split()))
写法三:
[::-1]
[::-1] 是列表的一个特殊的语法,用于将列表倒序输出,即从最后一个元素开始到第一个元素,步长为 -1。
print(*input().split()[::-1])
六、字符串移位包含问题
写法一:我自己的写法哈哈哈
a,b=input().split()
if len(a)<len(b):
a,b=b,a
s=a+a
if b in s:
print("true")
else:
print("false")
写法二:
s, t = input().split()
if len(s) < len(t):
s, t = t, s
for i in range(len(s)):
str = s[i:] + s[:i]
if str.find(t) != -1:
print('true')
break
else:
print('false')
写法三:
s, t = input().split()
if len(s) < len(t):
s, t = t, s
s *= 2
if s.find(t) == -1:
print('false')
else:
print('true')
七、字符串乘方
这个就是寻找最小的重复子串,且这个子串可以重复多次构成母串
写法一:
def check(l, s):
p = s[:l]
for i in range(l, len(s), l):
cur = s[i: i + l]
if p != cur:
return False
return True
while 1:
s = input()
if s == '.':
break
l = len(s)
maxl = 1
for curl in range(1, l):
if check(curl, s):
maxl = max(maxl, int(l / curl))
print(maxl)
写法二:
字符串最小的,肯定是重复次数最多的,所以我们只要一找到符合要求的,就可以跳出循环
while True:
s = input()
if s == '.':
break
n = len(s)
for i in range(1, n + 1):
if n % i == 0:
cs = s[:i]
res = int(n / i)
cs *= res#将求出的字符串和原来的字符串对比,如果是那就说明这个方案可行
if cs == s:
print(res)
break
写法三:
from collections import Counter
记录每个数字出现了多少次
from collections import Counter
while True:
s = input()
if s == '.':
break
c = Counter(s)
print(min(c.values()))
八、字符串最大跨度
写法一:
s, a, b = map(str, input().split(','))
if s.find(a) != -1 and s.find(b) != -1:
ai = s.find(a) + len(a)
s = s[::-1]
b = b[::-1]
bi = len(s) - s.find(b) - len(b)
if ai <= bi:
print(bi - ai)
else:
print(-1)
else:
print(-1)
写法二:
rfind
向前查询
s,s1,s2 = input().split(",")
a = s.find(s1)
b = s.rfind(s2)
if(a == -1 or b == -1 or a+len(s1) >= b):
print("-1")
else:
print(b-a-len(s1))
九、最长公共字符串后缀
while True:
n = int(input())
if n == 0:
break
ls = []
for i in range(n):
ls.append(input().strip()[::-1])
s1 = min(ls)#获取ls中最小的元素
s2 = max(ls)
res = ''
for i in range(len(s1)):
if s1[i] == s2[i]:
res += s1[i]
else:
break
print(res[::-1])