Python中常见的字符串小笔试题
1.获取实现两个字符串中最大的公共子串
思路:
1.比较两个字符串的长度
2.获取较短字符串的所有子串
3.使用__contains__函数进行比较
4.把子串当做键,子串长度作为值,存入字典,通过值,反过来取出所有这个长度的值,做到同样长度下多个值得情况
# coding=utf-8
str1 = "abcdef" str2 = "efdrabcefghdef" max_str = "" min_str = "" list1 = [] def list_str(max_str, min_str): # 2.获取较短字符串的所有子串 count = 0 n= len(min_str) while count < n: for i in range(n): list1.append(min_str[count:i + 1]) count += 1 # 3.判断较长字符串是否含有子串 def end(): dict1 = {} for i in list1: if max_str.__contains__(i): dict1[i] = len(i) # 把值当做键,把长度作为值 value1= max(dict1.values()) for key,value in dict1.items(): # 通过遍历,找到所有这个长度的值 if value== value1: print(key) # 1.首先判断两字符串长度 def start(str1, str2): global max_str, min_str max_str, min_str = str1, str2 if len(max_str) < len(min_str): max_str, min_str = str2, str1 list_str(max_str, min_str) # 2.获取子串 list_str(max_str, min_str) end() # 3,判断 if __name__ == '__main__': start(str1, str2) # 0.开始比较长度
2.给定几个字符串,输入一个字符,如果第一个字符相同,再输入第二个,同样情况,继续输入,直到找到唯一的字符串
思路
1.把给出的字符串放入一个列表中
2.输入字符,遍历列表,使用startswith()方法
3.将比较的结果进行判断
4.回调
# coding=utf-8 list1 = [] str1 = "Mon" str2 = "Mabc" str3 = "Mongddd" list1.append(str1) list1.append(str2) list1.append(str3) last = "" # 存储最后要输出的字符串 count = 0 # 用来标识是否有以输入字符开头的字符串 str_input = "" # 存储输入的字符串 def compare(input_str): global count, last count = 0 for i in list1: if i.startswith(input_str): count += 1 last = i def back(): global str_input if count == 1: # 如果是1,说明只有1个字符串有,则输出 print(last) elif count >= 2: # 如果没有,则继续输入,并且拼接上前面输入的字符串 input_str = input("请继续输入字母") str_input = str_input + input_str compare(str_input) # 重新调用比较 back() #回调本身,进行验证 if __name__ == '__main__': input_str = input("输入一个字母") str_input = input_str input_str = 'M' compare(input_str) # 调用比较是否有哪个字符串以这个字符开头 back()
3.给定一个字符串,根据字符出现的频度排序,例如"abcc",排序后的结果为"ccba"或者"ccab"
思路
1.把所有字符串转换成列表
2.使用max(set(list1),key=list1.count)方法求出列表中出现频度最大的字符串
3.请求出现的次数,并在列表中移除这个元素
4.根据列表的长度进行回调
# coding=utf-8 str1 = "abcc" list1 = list(str1) last_str = "" # 最终输出的字符串 def max_count_str(list_temp): # 判断出现频度最大的字符串 return max(set(list_temp), key=list_temp.count) def count_judge(str_temp): # 请求出现的频度,并在列表中去除这个元素 count = 0 while True: if str_temp in list1: list1.remove(str_temp) count += 1 else: break return count def start(): global last_str str_temp = max_count_str(list1) # 请出出现频度最大的字符 count = count_judge(str_temp) # 请求出现的频度,并在列表中去除这个元素 last_str = last_str + str_temp * count # 进行字符串拼接 if len(list1) > 0: start() # 如果列表中还有元素,回调,继续比较 if __name__ == '__main__': start() print(last_str)