输入:s ="abc1111" 输出:-1 解释:出现在 s 中的数字只包含 [1] 。没有第二大的数字。
提示:
1 <= s.length <= 500
s 只包含小写英文字母和(或)数字。
解题思路
首先创建一个长度为2的数组,这里我取名nums
规定nums[0]为第一大的数,nums[1]为第二大的数
当遇到数字时:
大于nums[0],更新nums[0]为num,更新nums[1]为nums[0]
小于nums[0]大于nums[1]更新nums[1],因为此时数字为第二大数字.
代码
Python
1 2 3 4 5 6 7 8 9 10 11
classSolution: defsecondHighest(self, s: str) -> int: ans = [-1, -1] for c in s: if c.isdigit(): num = int(c) if num > ans[0]: ans[0], ans[1] = num, ans[0] elif ans[1] < num < ans[0]: ans[1] = num return ans[1]
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
classSolution { public: intsecondHighest(string s){ int nums[2] = {-1, -1}; for (auto c: s) { if (isdigit(c) != 0) { int num = int(c - '0'); if (num > nums[0]) { nums[1] = nums[0]; nums[0] = num; } elseif (nums[1] < num && nums[0] > num) { nums[1] = num; } } } return nums[1]; } };
Go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
funcsecondHighest(s string)int { var ( first = -1 second = -1 ) for _, c := range s { if unicode.IsDigit(c) { num := int(c - '0') if num > first { second = first first = num } elseif second < num && first > num { second = num } } } return second }