猿辅导第一题AC代码

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = Integer.parseInt(in.nextLine());
        String[] strArr = new String[num];
        for (int i = 0; i < num; i++) {
            strArr[i] = in.nextLine();
        }
        for (int i = 0; i < num; i++) {
            System.out.println(decodeString(strArr[i]));
        }
    }

    public static String decodeString(String s) {

        String ret = "";
        for (int i = 0; i < s.length(); ) {
            if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                int tempIndex2 = i;
                //可能出现11,01这种数字
                while (i < s.length() && s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                    i++;
                }
                int freq1 = Integer.parseInt(s.substring(tempIndex2, i));
                //找到a10中的a字符
                String c = ret.charAt(ret.length() - 1) + "";
                //将a10变为aaaaaaaaaa
                ret = ret.substring(0, ret.length() - 1) + multiStr(c, freq1);

            } else if (s.charAt(i) == '(') {

                int weight = 0;
                //找到与i位置的[相匹配的右括号]的索引位置
                int j = i;
                for (; j < s.length(); j++) {
                    if (s.charAt(j) == '(') {
                        weight++;
                    } else if (s.charAt(j) == ')') {
                        weight--;
                        if (weight == 0) {
                            break;
                        }
                    }
                }
                //数字开始
                int tempI = j + 1;
                while (tempI < s.length() && s.charAt(tempI) >= '0' && s.charAt(tempI) <= '9') {
                    tempI++;
                }
                //找到频率
                int freq2 = Integer.parseInt(s.substring(j + 1, tempI));

                ret += multiStr(decodeString(s.substring(i + 1, j)), freq2);
                i = tempI;
            } else {
                //纯字符,直接+
                ret += s.charAt(i);
                i++;
            }

        }

        return ret;

    }


    private static String multiStr(String str, int freq) {
        String ret = "";
        if (freq == 0) {
            return ret;
        }
        for (int i = 0; i < freq; i++) {
            ret += str;
        }
        return ret;
    }
}

#猿辅导##笔试题目#
全部评论
#include <iostream> #include <string> using namespace std; string helper(string& s, int& index) {     string res, tmp;     int x = 0;     while(index < s.size()) {         if(s[index] == '('){ #遇到左括号递归开始             index++;             res += helper(s,index);         }else if(s[index] == ')') { #遇到右括号计算后面的数字,算完之后return             index++;             while(s[index] >= '0' && s[index] <= '9') {                 x = x*10+(s[index++]-'0');             }             tmp = res;             while(--x)                 res += tmp;             return res;         }else if(s[index] >= '0' && s[index] <= '9') {#直接遇到数字说明是单个字母的重复             x = 0;             while(s[index] >= '0' && s[index] <= '9') {                 x = x*10+(s[index++]-'0');             }             while(--x)                 res += res.back();         }         else{#其它字母直接加             res += s[index++];         }     }     return res; } int main() {     int n = 0,index = 0;     string s;     getline(cin,s);     n = stoi(s);     for(int i = 0; i < n; i++) {         getline(cin,s);         index = 0;         string res = helper(s,index);         cout << res <<endl;     }     return 0; } 来个C++版的
点赞 回复 分享
发布于 2019-08-03 20:58
大佬,这线下让我看都得研究半天😂,果然菜是原罪呀
点赞 回复 分享
发布于 2019-08-03 20:48
跟你思路差不多,但是就是写不出来,哎练得还是少啊,向大佬看齐
点赞 回复 分享
发布于 2019-08-03 20:57
大佬20行,44行是不是有点问题啊,复制到idea报错
点赞 回复 分享
发布于 2019-08-03 20:55
大佬!!学习
点赞 回复 分享
发布于 2019-08-03 20:52
public class Test03 { public static void main(String[] args) { int dp[][] = new int[1000][1000]; Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int m = scanner.nextInt(); dp[0][1] = 1; dp[1][n] = 1; dp[1][2] = 1; for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { if (j == 1) { dp[i][j] = dp[i - 1][n] + dp[i - 1][2]; } else if (j == n) { dp[i][j] = dp[i - 1][1] + dp[i - 1][n - 1]; } else { dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1]; } } } System.out.println(dp[m][1]); } }
点赞 回复 分享
发布于 2019-08-03 20:51
大佬最后一题是dp吗,但为啥我的只有10%
点赞 回复 分享
发布于 2019-08-03 20:50
tql
点赞 回复 分享
发布于 2019-08-03 20:49
膜拜,大佬,你a了几道
点赞 回复 分享
发布于 2019-08-03 20:48
tql
点赞 回复 分享
发布于 2019-08-03 20:48

相关推荐

xdm&nbsp;早上喝奶茶差点喷出来。事情是这样的,我们班有个哥们儿,简称&nbsp;L,去年秋招拿了字节sp,专业方向是后端。我们当时都震惊:这哥们儿平时课上从来不发言,期末小组作业基本是划水的那种,刷题平台&nbsp;commit记录我点进去看过,绿格子稀稀拉拉。但他面试一路绿灯。一面二面三面&nbsp;hr&nbsp;面,全过,给的还是sp。当时班级群里恭喜他的、问他经验的、约饭的,热闹了一周。他说自己"运气好,准备充分"。我们都信了,直到三月初他入职。入职第二周开始,班里另一个进字节的同学W(在隔壁组的)开始跟我他的不对劲。一开始是写代码慢,后来写不出来,再后来是组里&nbsp;mentor&nbsp;让他fix&nbsp;一个简单&nbsp;bug&nbsp;都搞了一下午没动静。最离谱的是上周。W&nbsp;说他们大部门搞了个新人分享会,让新人讲一下自己负责模块的设计思路。L&nbsp;上去讲了&nbsp;20分钟,全程念稿子,问答环节别人随便问一个"那你这里为什么用&nbsp;Redis&nbsp;不用&nbsp;Memcached",他直接卡&nbsp;30秒说"这个我回去再确认一下"。会后他&nbsp;mentor&nbsp;直接找&nbsp;leader&nbsp;谈,leader&nbsp;找&nbsp;hr&nbsp;谈,hr调出了他面试录像,全程对比口型和回答节奏,发现他二三面有大量时长在偷偷看屏幕外(推测开了双机位&nbsp;AI&nbsp;答题)。(这段是&nbsp;W后来转述给我的,他自己也是听他组里同事八卦来的)昨天下班前,W&nbsp;告诉我L&nbsp;被辞退了,让他自己走,不走就走仲裁但会发函到学校。L&nbsp;现在已经回学校了,朋友圈仅三天可见。我说真的,我不是个心眼小的人,但是我看到这个消息的时候真的有种"嗯,挺好"的感觉。去年秋招我投字节后端,简历挂。我准备了八个月,背&nbsp;八股&nbsp;+&nbsp;刷&nbsp;500&nbsp;题&nbsp;+项目改了三版,连面试机会都没拿到。班里这哥们儿凭着一个外挂上岸,最后还是被甩出来了。不是说作弊就一定会被发现,但是当面试拿到的&nbsp;offer远远超出真实能力的时候,迟早会有这一天。试用期三个月不是给你过家家的,是真的要写代码、要在会议上回答问题、要扛需求的。我现在反而有点同情他。同情他相信"上岸就是终点"。发出来不是为了嘲笑谁,就是想说给那些正在被身边作弊上岸的同学搞得很&nbsp;emo&nbsp;的&nbsp;uu&nbsp;们听——别急,回旋镖很长,但它一定会回来。你继续刷你的题,写你的项目,背你的八股。该是你的迟早是你的,不是你的早晚还得还回去。xdm&nbsp;共勉。
牛客12588360...:我不想评论面试方式,作弊是绝对不对的,但是你八股加刷题也不过是个做题小子,他穿帮纯粹是他菜,你也没有高明到哪里去
点赞 评论 收藏
分享
评论
点赞
27
分享

创作者周榜

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