python-又来练习题--输出一个字符串中最长的子字符串及其长度

一、有个字符串 str= '$sd1#111$svda123!!!221&eSSDSyyyyyyDG^svda121^svda124^1111111111111'
包含特殊字符、数字和字母,输出最长的子字符串和他的长度
例如上面的字符串同时包含数字和字母的字符串是svda123,长度是7
思路:
1、先把特殊字符转换成固定字符#
2、按照固定字符分割字符串生成lis
3、获取lis中每一个的长度并生成第二个用来存储长度的len_lis
4、获取长长度然后统计最长长度的数量
5、如果只有数量是1的话直接通过下标获取lis的下标然后输出字符串和长度
6、如果数量大于1就通过下标循环判断等于最长长度的长度然后输出字符串和长度
str= '$sd1#111$svda123!!!221&eSSDSyyyyyyDG^svda121^svda124^1111111111111'
import string
for s in string.punctuation:
   if s in str:
      str = str.replace(s,'#')
lis = str.split('#')
len_lis=[]
for  i in lis:
   len_lis.append(len(i))
max_len= max(len_lis)
max_len_count =len_lis.count(max_len)
if max_len_count >1:
   for len in range(len(len_lis)):
      if len_lis[len] == max_len:
         print('最长的字符串是%s,最长的长度是%s'%(lis[len],max_len))
else:
   index = len_lis.index(max_len)
   st = lis[index]
   print('最长的字符串是%s,长度是%s'%(st,max_len))

 二、如果输出的字符串必须同事包含数字和字母:

分析:

不过是加了一个条件就是最长的字符串必须同事包含数字和字母

思路:
1、先把特殊字符转换成固定字符#
2、按照这个固定字符分割字符串并且判断是不是同时包含数字和字母将符合条件的放到lis中
3、获取lis中每一个的长度并生成第二个用来存储长度的len_lis
4、获取长长度然后统计最长长度的数量
5、如果只有数量是1的话直接通过下标获取lis的下标然后输出字符串和长度
6、如果数量大于1就通过下标循环判断等于最长长度的长度然后输出字符串和长度

 

import string
str= '$sd1#111$svda123!!!221&eSSDSyyyyyyDG^svda121^svda124^1111111111111'
for s in string.punctuation:
     if s in str:
         str = str.replace(s,'#')
lis = str.split('#')
res_lis=[]#用来存放符合条件的字符串
len_lis=[]#用来存放符合条件的字符串的长度
for  i in lis:
    if   not i.isdigit() and  not i.isalpha() and len(i)>0:
        res_lis.append(i)
        len_lis.append(len(i))
max_len = max(len_lis)
max_len_count = len_lis.count(max_len)
if  max_len_count >1:
    for e in range(len(len_lis)):
        if len_lis[e] == max_len:
            print('最长的字符串是%s,长度是%s' % (res_lis[e], max_len))
else:
    index = len_lis.index(max_len)
    st = res_lis[index]
    print('最长的字符串是%s,长度是%s'%(st,max_len))

 

posted @ 2017-11-30 20:34  D.零下的小书屋  阅读(2215)  评论(0编辑  收藏  举报