georgegou的个人博客分享 http://blog.sciencenet.cn/u/georgegou

博文

寻找字符串中的最大奇数

已有 890 次阅读 2021-6-20 15:42 |个人分类:算法与数据结构|系统分类:科研笔记

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

    }

};

```




http://blog.sciencenet.cn/blog-3465931-1291970.html


下一篇:[bash]统计本文字频

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2021-12-1 00:39

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部