题意
给你一个混合字符串 s ,请你返回 s 中 第二大 的数字,如果不存在第二大的数字,请你返回 -1 。
混合字符串 由小写英文字母和数字组成。
思路
思路1:
用map存储0~9每个数字是否出现过,然后再从9开始倒序遍历,如果说当前是出现的第二个数字的话就返回当前值;
思路2:
将答案用first,second两个变量记录,分别表示第一大数字和第二大数字。
- 如果当前字母不是数字,continue
- 如果当前数字大于first,将second赋值为first,first赋值为当前数字
- 如果当前数字位于first到second之间,将second赋值为当前数字
- 最后second就是答案
代码
func secondHighest(s string) int {
mp := make(map[int]struct{})
for _,val := range s {
if val >= '0' && val <= '9' {
mp[int(val-'0')] = struct{}{}
}
}
ans := 0
for i:= 9; i >= 0; i -- {
if _,ok := mp[i]; ok {
ans ++
if ans == 2 {
return i
}
}
}
return -1
}
func secondHighest(s string) int {
first,second := -1,-1
for _,val := range s {
if !(val >= '0' && val <= '9') {
continue
}
now := int(val-'0')
if now > first {
second = first
first = now
}else if now > second && now < first {
second = now
}
}
return second
}