虾皮笔试

三道编程题 AC 一点五道

第一题:最接近的三数之和,

一开始看到这个题目就很怕,感觉做不来,后来第二题调不出来了,回过来做,发现可以先排序,再来一层 for,第二层双指针遍历,维护最接近的和就行。然后调出测试数据提交就 AC 了。

第二题:描述起来有点复杂,算了

第三题:有效的字符串解码

一开始就想着怎么匹配整个表达式,写出来的 regex="([a-z]*)(\\d+)\\{(.*)\\}([a-z]*)",但是忽略了同级嵌套深度有多对花括号的情况,导致只有 50%,一直没想出来哪里错了,快结束了才突然想到

将游程编码解码 例如:a2{b} = abb, a2{b2{c}e} = abccebcce

正则表达式的应用,解决这种嵌套的匹配应该借助栈,而 Java 的正则表达式是不支持递归的。因此因将输入序列像处理表达式求值那样,将原表达式分解成 token 序列,然后计算。相当于表达式求值 。

(:?pt1|pt2|..) (:?)是一个非捕获分组,里面可以匹配多种模式(pattern)

import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Solution {
  /**
   * Note: 类名、方法名、参数名已经指定,请勿修改
   *
   *
   * 
   * @param s string字符串
   * @return string字符串
   */
  Pattern pattern = Pattern.compile("(:?\\d+|\\{|[a-z]+|\\})");

  public String decodeString(String s) {
    Matcher matcher = pattern.matcher(s);

    Stack<String> tks = new Stack<>();


    while (matcher.find()) {
      String token = matcher.group();

      switch (token) {
        case "{":
          tks.push(token);
          break;
        case "}":
          String str = tks.pop();
          while (!tks.peek().equals("{")) {
            String top = tks.pop();
            top += str;
            str = top;
          }
          tks.pop();
          int time = Integer.parseInt(tks.pop());
          for (int i = 0; i < time - 1; i++) str += str;
          tks.push(str);
          break;
        default:
          tks.push(token);
          break;
      }
    }

    StringBuilder res = new StringBuilder();
    tks.forEach(tk -> res.append(tk));

    return res.toString();
  }

  public static void main(String[] args) {
    // Pattern pt = Pattern.compile("(:?\\d+|\\{|[a-z]+|\\})");
    // Matcher matcher = pt.matcher("adskfjasjk");

    // while (matcher.find()) {
    //   System.out.println(matcher.group());
    // }

    System.out.println(new Solution().decodeString("a2{b}c2{d}"));
  }
}
全部评论
0 50 83
点赞 回复
分享
发布于 03-20 23:20 湖北
一样的题目,三数和和字符串解码都是原题,AC了2.6道
点赞 回复
分享
发布于 03-21 12:52 江苏
联易融
校招火热招聘中
官网直投
A1.7道刚才看已经挂了😓
点赞 回复
分享
发布于 03-21 14:12 湖南
请问虾皮的笔试编程允许本地ide吗?
点赞 回复
分享
发布于 04-01 18:33 江苏

相关推荐

3 7 评论
分享
牛客网
牛客企业服务