LeetCode Hot100 生成特殊数字的最少操作

给你一个下标从 0 开始的字符串 num ,表示一个非负整数。

在一次操作中,您可以选择 num 的任意一位数字并将其删除。请注意,如果你删除 num 中的所有数字,则 num 变为 0

返回最少需要多少次操作可以使 num 变成特殊数字。

如果整数 x 能被 25 整除,则该整数 x 被认为是特殊数字。

示例 1:

复制代码
输入:num = "2245047"
输出:2
解释:删除数字 num[5] 和 num[6] ,得到数字 "22450" ,可以被 25 整除。
可以证明要使数字变成特殊数字,最少需要删除 2 位数字。

示例 2:

复制代码
输入:num = "2908305"
输出:3
解释:删除 num[3]、num[4] 和 num[6] ,得到数字 "2900" ,可以被 25 整除。
可以证明要使数字变成特殊数字,最少需要删除 3 位数字。

示例 3:

复制代码
输入:num = "10"
输出:1
解释:删除 num[0] ,得到数字 "0" ,可以被 25 整除。
可以证明要使数字变成特殊数字,最少需要删除 1 位数字。

思路

只要结尾是00,75,25,50还有只剩0和全删这几种答案,从尾记录最短的长度。

代码

cpp 复制代码
class Solution {
public:
    int minimumOperations(string num) {
        unordered_map<char, int> hashtable;
        int cnt = 0;
        char ch;
        for(int i = num.size()-1;i >= 0; --i)
        {
            ch = num[i];
            if((ch == '0' || ch == '5') && hashtable.find('0') != hashtable.end())
                return cnt-1;
            if((ch == '2' || ch == '7') && hashtable.find('5') != hashtable.end())
                return cnt-1;
            else
            {
                ++hashtable[ch];
                ++cnt;
            }
        }
        if(hashtable.find('0') == hashtable.end())
            return num.size();
        else
            return num.size()-1;
    }
};
相关推荐
Learn-Share_HY40 分钟前
[Linux]如何設置靜態IP位址?
linux·运维·tcp/ip·ubuntu·static ip
Everbrilliant891 小时前
Ubuntu系统下交叉编译Android的X265库
linux·运维·ubuntu·x265交叉编译·android x265·ffmpeg x265
我不要放纵2 小时前
LVS集群搭建
linux·服务器·lvs
阿巴~阿巴~2 小时前
自主Shell命令行解释器
linux·运维·服务器
许白掰2 小时前
Linux入门篇学习——借助 U 盘或 TF 卡拷贝程序到开发板上
linux·学习·借助 u 盘拷贝程序到开发板上·借助 tf卡拷贝程序到开发板上
SHUIPING_YANG2 小时前
根据用户id自动切换表查询
java·服务器·数据库
Norvyn_72 小时前
LeetCode|Day18|20. 有效的括号|Python刷题笔记
笔记·python·leetcode
chao_7892 小时前
更灵活方便的初始化、清除方法——fixture【pytest】
服务器·自动化测试·python·pytest
呆呆的小鳄鱼3 小时前
leetcode:冗余连接 II[并查集检查环][节点入度]
算法·leetcode·职场和发展
墨染点香3 小时前
LeetCode Hot100【6. Z 字形变换】
java·算法·leetcode