【每日一题】2496. 数组中字符串的最大值

【每日一题】2496. 数组中字符串的最大值

  • 2496. 数组中字符串的最大值
    • 题目描述
    • 解题思路

2496. 数组中字符串的最大值

题目描述

一个由字母和数字组成的字符串的 值 定义如下:

如果字符串 只 包含数字,那么值为该字符串在 10 进制下的所表示的数字。
否则,值为字符串的 长度 。
给你一个字符串数组 strs ,每个字符串都只由字母和数字组成,请你返回 strs 中字符串的 最大值 。

示例 1:

输入:strs = ["alic3","bob","3","4","00000"]
输出:5
解释:
- "alic3" 包含字母和数字,所以值为长度 5 。
- "bob" 只包含字母,所以值为长度 3 。
- "3" 只包含数字,所以值为 3 。
- "4" 只包含数字,所以值为 4 。
- "00000" 只包含数字,所以值为 0 。
所以最大的值为 5 ,是字符串 "alic3" 的值。

示例 2:

输入:strs = ["1","01","001","0001"]
输出:1
解释:
数组中所有字符串的值都是 1 ,所以我们返回 1 。

提示:

1 <= strs.length <= 100
1 <= strs[i].length <= 9
strs[i] 只包含小写英文字母和数字。

解题思路

思路:遍历字符串数组,使用sum表示当前字符串数值,使用flag表示当前字符串是否是纯数值,遍历当前字符串,使用isalpha判断当前字符是否是字母,如果是则标记flag为false并且直接退出内层循环,反之从高位向低位求解字符串数值,即sum=sum*10+s[i],当遍历完当前字符串后,根据flag来判断是使用字符串长度还是字符串数值。

class Solution {
public:
    int maximumValue(vector& strs) {
        int maxc=0;
        for(auto str:strs)
        {
            int sum=0;
            bool flag=true;
            for(auto s:str)
            {
                //判断s是否是字母
                if(isalpha(s))
                {
                    flag=false;
                    //一旦发现一个字母则退出循环
                    break;
                }
                //计算数值和
                sum=sum*10+(s-'0');
            }
            if(flag)
                maxc=max(maxc,sum);
            else
                maxc=max(maxc,(int)str.size());
        }
        return maxc;
    }
};

总结:C++中,isdigit方法用于判断字符是否是数字,isalpha方法用于判断字符是否是字母,字符串方法str.size()返回的是无符号整数,如果要用于大小比较则需要(int)显示转换为int类型。

你可能感兴趣的:(每日一题,c++,算法,开发语言)