Python|字符串中第二大的数字

简介: Python|字符串中第二大的数字

问题描述

给你一个混合字符串s,请你返回s中第二大的数字,如果不存在第二大的数字,请你返回-1。混合字符串由小写英文字母和数字组成。

示例:

输入:s = ‘dfa12321afd’

输出:2


解决方案

这是一道看似不难的题,但是实际操作会发现有很多难点,比如如何删除掉字符串中的混合英文字母,其次如何解决有重复数字出现的情况,再有如果不存在第二大数字的情况。

首先我们可以先遍历这个字符串,但是由于我们要进行删除排序等操作,所以要先把字符串转化为列表。因为我们是要进行遍历以及删除的,所以在遍历过程中如果原列表进行了改变,会导致错误的结果。所以我们要建立一个元素一样的列表,用来遍历,最后返回删除过的列表就可以了。然后我们要进行混合列表的筛选,通过对字符的ASCII码是否在字母的范围中来判断是否需要删除,将删除后的列表进行排序再取第二大的。其中有一个坑就是,如果有相同的数字则会返回错误答案,所以我们利用set可以查重的属性来查找第二大的数字。

代码及运行结果如下:

s = input(‘请输入字符串’)

c = list(s)

a = list(s)#做改变的

for i in s:

    if ord(i)>= 97 and  ord(i)<=122:

        a.remove(i)

    else:

        continue

 

if len(set(a))>1:

    print(int(sorted(set(a))[-2]))

else:

    print(-1)


另外一种比较快的操作方法就是,运用filter函数的筛选来过滤字母。isdigit()是一个内置,如果字符串只包含数字则返回True,否则返回False。但是这是字符串的内置,最后要返回的是数字,要用int函数改变一下形式。

s = 'sekfjis077'

digit = filter(str.isdigit, s)  # 过滤英文字母

ss = sorted(set(digit))

if len(ss) == 1 or len(ss) == 0:

        print(-1)

else:

    print(int(ss[-2]))


结语

这道题第二种方法运用了isdight()内置的方法,相比第一种用ASCII码的方法简单了很多,但是需要理解记忆并熟练运用。




目录
相关文章
|
15天前
|
Python
使用Python处理字符串。
使用Python处理字符串。
|
15天前
|
算法框架/工具 索引 Python
Python基础教程(第3版)中文版 第三章 使用字符串(笔记)
Python基础教程(第3版)中文版 第三章 使用字符串(笔记)
|
1天前
|
存储 索引 Python
字符串、列表、元组、字典(python)
字符串、列表、元组、字典(python)
|
4天前
|
数据采集 开发者 Python
在Python中判断字符串中是否包含字母
在Python中判断字符串中是否包含字母
19 4
|
3天前
|
Python
python之字符串定义、切片、连接、重复、遍历、字符串方法
python之字符串定义、切片、连接、重复、遍历、字符串方法
6 0
python之字符串定义、切片、连接、重复、遍历、字符串方法
|
14天前
|
Python 索引
【Python字符串攻略】:玩转文字,编织程序的叙事艺术
【Python字符串攻略】:玩转文字,编织程序的叙事艺术
|
14天前
|
Python
刷题——Python篇(3)字符串
刷题——Python篇(3)字符串
|
16天前
|
Python
Python使用正则表达式分割字符串
在Python中,你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法,但它允许你使用正则表达式作为分隔符。
|
23天前
|
Python
【Python 训练营】N_13 遍历字符串
【Python 训练营】N_13 遍历字符串
16 2
|
2天前
|
索引 Python 容器
深入探索Python字符串:技巧、方法与实战
深入探索Python字符串:技巧、方法与实战

热门文章

最新文章