本題為12月3日力扣每日一題
題目來源:力扣第1796題
題目tag:遍歷
題面
題目描述
給你一個混合字串s,請你回傳s中第二大的數字,如果不存在第二大的數字,請你回傳-1,
混合字串由小寫英文字母和數字組成,
示例
示例 1
輸入:
s = "dfa12321afd"
輸出:
2
解釋:
出現在s中的數字包括[1, 2, 3],第二大的數字是2,
示例 2
輸入:
s = "abc1111"
輸出:
-1
解釋:
出現在s中的數字只包含[1],沒有第二大的數字,
提示
1 <= s.length <= 500
s 只包含小寫英文字母和(或)數字,
思路分析
很簡單的一道遍歷題,直接遍歷整個字串,處理其中的數字即可.
可能對于以前沒有做過找第二大資料的新人朋友來說,更新第二大寫起來有些困難.其實只要清楚第二大數字的來源即可,其來源只可能有兩個:
- 比最大小而比第二大大的數字
- 原本的最大數字被一個更大的數字更新之后,就是第二大的數字了
所以只需要在最大被替換后對第二大進行更新即可,這里做法有很多,不一定要按我這樣做.
參考代碼
class Solution
{
public:
int secondHighest(string s)
{
int maxDig = -1, max2Dig = -1; // 最大和次大數字
for (auto c : s)
{
if (c >= '0' && c <= '9') // 當前是數字
{
if (c - '0' > maxDig) // 比最大的要大
{
int t = maxDig;
maxDig = c - '0'; // 更新最大
c = t + '0'; // 最大可能成為第二大,所以需要保留
}
if (c - '0' < maxDig && c - '0' > max2Dig) // 比最大小但是比第二大大
{
max2Dig = c - '0';
}
}
}
return max2Dig;
}
};
"正是我們每天反復做的事情,最終造就了我們,優秀不是一種行為,而是一種習慣" ---亞里士多德
這里是浙江理工大學22屆ACM集訓隊的成員一枚鴨!
本文首發于博客園,作者:星雙子,除了我自己的轉載請注明原文鏈接:https://www.cnblogs.com/geministar/p/LeetCode1796.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/539117.html
標籤:其他
