计算单词数(不用栈)

题目:https://ac.nowcoder.com/acm/contest/7412/C

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.math.BigInteger;
import java.util.*;
public class Main{
    public static int i = 0;
    public static char[] ch;
    public static int len = 0;
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        HashMap<Integer,Integer> map = new HashMap<>();
        String s = sc.nextLine();
        ch = s.toCharArray();
        len = ch.length;
        System.out.println(Mymath());


    }
    public static long Mymath(){
    long sum = 0;
    while(true){
        if(i >= len){
            return sum;
        }
        if(ch[i] == '('){
            i++;
            sum += Mymath();      //有可能嵌套
        }else if(ch[i] == ')'){
            i++;
            int a = 0;
            while(i < len && ch[i] >='0' && ch[i] <= '9'){
                a = a * 10 + ch[i] - '0';
                i++;
            }
            if(a == 0){
                a=1;
            }
            return sum * a;
        }else{
            int a = 0;
            int count = ch[i] - 'A' + 1;
            i++;
            while(i < len && ch[i] >='0' && ch[i] <= '9'){
                a = a * 10 + ch[i] - '0';
                i++;
            }
            if(a == 0){
                a=1;
            }
            sum += count * a;
        }
    }
    }
}

对于这一题是值得自己去钻研的,因为一开始是没有头绪,然后想到用栈,但是用栈好像又太麻烦(如果有嵌套的话),所以借鉴了一下别人的代码,能看得懂,但是自己做的时候思路还不是很清晰,所以写一遍题解让自己加深一下印象。

首先,先定义一个全局变量的i,数组ch,数组长度len。接下来写一个方法,方法中要实现过滤符号,碰到数字要计算成功,还有一个就是最难想到的嵌套,嵌套看了之后恍然大悟,直接这一个ch如果是左括号,那么i++,然后进入嵌套方法,嵌套方法返回的就是一个数值,所以直接拿sum加上即可。如果碰到右括号,i++,判断最外面有没有数,如果有,直接sum相乘 即可return,注意了,这就是死循环的出口。

最后一个就是判断字母了,首先‘A’是1,一次类推,那么如果这一个字符正好是A那么count = ch[i] - 'A' + 1,就可以了,这样能保证每个得到的字母都是正确的。那么在每次计数时,都要把a重置,重置之后利用while判断,符合条件就在内循环。while里面的循环是防多位数(例如有 十个上百个A,都能算出来),算出来之后count X a就可以得到一个单词的数了。

全部评论

相关推荐

Twilight_m...:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
榕城小榕树:1200单休,我去干点啥别的不好
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务