苟家宁
寻找字符串中的最大奇数
2021-6-20 15:42
阅读:833

#### [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

收藏

分享到:

上一篇
当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?