#### [5788. 字符串中的最大奇数](https://leetcode-cn.com/problems/largest-odd-number-in-string/)
> 给你一个字符串 num ,表示一个大整数。请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ,并以字符串形式返回。如果不存在奇数,则返回一个空字符串 "" 。
>
> 子字符串是字符串中的一个连续的字符序列。
> 示例 1:
> 输入:num = "52"
> 输出:"5"
> 解释:非空子字符串仅有 "5"、"2" 和 "52" 。"5" 是其中唯一的奇数。
> 示例 2:
> 输入:num = "4206"
> 输出:""
> 解释:在 "4206" 中不存在奇数。
> 示例 3:
> 输入:num = "35427"
> 输出:"35427"
> 解释:"35427" 本身就是一个奇数。
>
> 提示:
>
> 1 <= num.length <= 105
> num 仅由数字组成且不含前导零
>
## 解题思路:
此题较为简单,
1、首先需要了解把字符转换为数字,根据ascii码(美国标准信息交换代码),'0'字符对应ascii码48,'2'字符对应ascii码50,两者相减,能得到整数2,实现了由字符到整数的转换;
2、字符串的子串只能是**任意连续的**字符组成的子序列,不能调换子串的位置,比如字符串"ab", 其子串为"a"、"b"、"ab"、”/0“,不能是"ba"。
3、由2可知,既然子串的位置不能调换,那么子串的位数越多,值当然也就越大,于是我们采用从右向左的遍历方式(由第四个例子启发),如果在字符串末尾发现奇数,就可以返回全字符串,好在题目给出了没有**前导零**的存在,就避免了讨论
4、需要用到两个C++ string类的两个函数,s.size()返回字符串个数,s.substr(a,b)索引从a到b子串的字符
```C++
class Solution {
public:
string largestOddNumber(string num) {
int n = num.size();
for (int i = n - 1; i >= 0; --i){
if ((num[i] - '0') % 2 == 1){
// 找到第一个值为奇数的字符,返回 num[0:i+1]
return num.substr(0, i + 1);
}
}
// 未找到值为奇数的字符,返回空字符串
return "";
}
};
```
转载本文请联系原作者获取授权,同时请注明本文来自苟家宁科学网博客。
链接地址:https://wap.sciencenet.cn/blog-3465931-1291970.html?mobile=1
收藏