华为社招JAVA机试20210226分享

题目:
输入:字符串(保证长度小于100),字符串包含数字、大小写字母,大中小括号,括号可以嵌套(保证括号成对)。
输出:将数字后面跟的括号内容按照数字重复拼接,然后整体倒叙输出。
例如:输入:abc3(A),输出:AAAcba。

解题: String s = scanner.nextLine();
StringBuilder sb = s.resolve(new StringBuilder(s)).reverse();
System.out.println(sb);

// 下面的i++之所以没有家在 for(; ;i++) 这里,是因为判断2里跳跃的是括号内的长度,不能自增1
StringBuilder resolve(StringBuilder s){
    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < s.length();){
    char c = s.charAt(i);
    if(c >=  'a' && c <= 'z' || c >= 'A' && c <= 'Z'){
        // 判断1
        sb.append(c);
        i++;
    }else if (c >= '0' || c <= '9'){
        // 判断2
        int num = c - '0';
        for(int n = 0; n< num; n++){
            sb.append(resolve(xxx));
        }
        // j 表示数字后面跟的括号的反括号的下标
        i = j + 1;
    } else if (c == '{' || c == '[' || c == '('){
        // 判断3
        int num = 1;
        sb.append(resolve(xxx));
        // j 表示数字后面跟的括号的反括号的下标
        i = j + 1;
    } else {
        // 判断4
        sb.append(c);
        i++;
    }
}
代码写的有点low,但是我在执行代码的时候,碰到一些疑问:
疑问一:
我一开始只写了判断1和判断2,但是代码会超时,只成功了80%,
这时候我想到的是有没有可能输入了不带数字前缀的括号内容,所以增加了判断3,结果没变。
然后又增加了判断4,结果就通过了。
疑问点:是我的判断1和判断2(里面包含了判断括号),漏判了大小写字母和数字吗?还是虽然题目写明只有这些字符,但是实际输入了其他字符?如果是后者,那是不是题目不严谨?
疑问二:
在我调用StringBuilder的reverse()方法的时候,编译器自动提示reversed(),因为这个方法不常用,导致我没有记住正确的单词,结果编译反复提示找不到这个方法。没办法只能手写反转了。
疑问点:编译器这么low吗,一直提示错误的方法。(同样还有会提示字符串的size()方法而不是length()方法,也是个错的)

有人提醒我一下问题在哪里吗?

#华为##Java工程师##笔经#
全部评论
不是可以本地ide调试吗
点赞 回复
分享
发布于 2021-02-27 17:59
为啥我机考只有一道题目???
点赞 回复
分享
发布于 2021-03-07 15:26
饿了么
校招火热招聘中
官网直投
reverse是不行的, 括号reverse后就反转了
点赞 回复
分享
发布于 2023-04-03 10:09 广东

相关推荐

点赞 12 评论
分享
牛客网
牛客企业服务