题目链接
题目描述
思路分析
代码演示
1、题目链接
2844. 生成特殊数字的最少操作 - 力扣(LeetCode)
2、题目描述
3、思路分析
要想变成25的倍数,他有规律,就是最后两个数是25 的倍数,也就是00,25,50,75,
也就是判断当栈不为空且个数为1时,如果它的栈顶是 0,则要判断后面是否出现了 0 , 5
如果出现了直接返回 (长度-i-2) 原因是他以及前面的都不用删除,再加上它后面的0
如果栈顶为 5 ,则要判断是否出现了 2 , 7。如果出现了也是直接返回 (长度-i-2),
但是注意如果 0 出现在 5 的后面,并且在 2 ,7的前面 ,相当于2···0···5;则要将0 加入到栈中,
然后在栈不为空且数量为2时 ,判断后面是否出现 0 , 2, 5, 7;返回 (长度-i-2)
最后判断字符串中是否包含‘0’,如果是,返回 (长度-1)
不是,返回 (长度)
兄弟们,字符串的方法用起来
4、代码演示
class Solution {
public int minimumOperations(String num) {
Stack<Character> s=new Stack<>();
int n=num.length();
for(int i=n-1;i>=0;i--){
char t=num.charAt(i);
if(!s.empty()){
if(s.size()==1){
if(s.peek()=='0'){
if(t=='0'||t=='5')
return n-i-2;
}else if(s.peek()=='5'){
if(t=='2'||t=='7'){
return n-i-2;
}else if(t=='0'){
s.push(t);
}
}
}else{
if(t=='0'||t=='5'||t=='2'||t=='7')
return n-i-2;
}
}
else if(t=='0'||t=='5'){
s.push(t);
}
}
boolean flag=num.contains("0");
if(flag==true)
return n-1;
return n;
}
}