回复: 10
收起左侧

狗23年2月新鲜店面

|只看干货
匿名用户-4ESZC  2023-2-8 02:55:21 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎

2023(1-3月) 码农类General 硕士 全职@google - 网上海投 - 技术电面  | 😃 Positive 😐 AverageOther | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
刚面完,题目要求实现字符串转换,例子如下:
A3B2 -> (A,3), (B,2)
(A3B2)2 -> (A,6), (B,4)
A2(A3B2)2 -> (A
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
ut是string, 要求output是map

评分

参与人数 2大米 +6 收起 理由
清道神君 + 5
FLAG指定锦鲤 + 1 给你点个赞!

查看全部评分


上一篇:Citadel NG OA
下一篇:Flexport Token Game 4问全过完整代码!
地里匿名用户
匿名用户-GSUQ7  2023-2-8 08:05:24
本楼: 👍   100% (2)
 
 
0% (0)   👎
理论上之后是“you did great but I don't have a position for you"
回复

使用道具 举报

啤酒加盐 2023-2-10 01:21:16 | 显示全部楼层
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   96% (232)
 
 
3% (9)    👎
  1. public static Map<Character, Integer> convert(String input) {
  2.         Map<Character, Integer> result = new HashMap<>();
  3.         Stack<Integer> stack = new Stack<>();
  4.         int multiplier = 1;
  5.         int k = 0;
  6.         for (int i = input.length() - 1; i >= 0; i--) {
  7.             char c = input.charAt(i);
  8.             if (c >= '0' && c <= '9') {
  9.                 int number = c - '0';
  10.                 stack.push(number);
  11.             } else if (c >= 'A' && c <= 'Z') {
  12.                 k += stack.pop();
  13.                 result.put(c, result.getOrDefault(c, 0) + k * multiplier);
  14.                 k = 0;
  15.             } else if (c == ')') {
  16.                 multiplier *= stack.pop();
  17.             } else if (c == '(') {
  18.                 multiplier = 1;
  19.             }
  20.         }
  21.         return result;
  22.     }
复制代码
回复

使用道具 举报

Lucky- 2023-2-8 03:09:02 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   90% (95)
 
 
9% (10)    👎
方便透露下职位或者level吗
回复

使用道具 举报

地里匿名用户
匿名用户-D5T4R  2023-2-8 05:13:19
本楼: 👍   0% (0)
 
 
0% (0)   👎
有几个问题,感觉描述有些模糊。。
有没有可能存在以下的情况?
1. (A2B3)A2
2. A2(B3)(A3)
3. ABA2B
4. A2((B2)2)4
可能还有一些情况我没暂时没想到。。就字母是否一定跟这数字,数字的位数有没有限制,有括号后一定跟数字吗,已经最多能有几个括号嵌套。。。
回复

使用道具 举报

地里匿名用户
匿名用户-4ESZC  2023-2-8 07:41:00 来自APP
本楼: 👍   0% (0)
 
 
0% (0)   👎
匿名用户 发表于 2023-02-07 13:13:19
有几个问题,感觉描述有些模糊。。
有没有可能存在以下的情况?
1. (A2B3)A2
不好意思没有描述清楚,题目本身就是这样给出的,专门留了模糊的空间让我问。字母后面和)后面一定跟有0-9的单个数字,会有括号嵌套的情况,结果可以假定不超过Integer maximum value
回复

使用道具 举报

FLAG指定锦鲤 2023-2-8 07:49:52 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   98% (223)
 
 
1% (3)    👎
lz怎么做的?用stack么?谢谢lz,给你加米。
回复

使用道具 举报

地里匿名用户
匿名用户-4ESZC  2023-2-8 12:32:57 来自APP
本楼: 👍   0% (0)
 
 
0% (0)   👎
FLAG指定锦鲤 发表于 2023-02-07 15:49:52
lz怎么做的?用stack么?谢谢lz,给你加米。
对,stack of map
回复

使用道具 举报

小亩_b53bbb8 2023-2-8 14:44:18 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   85% (219)
 
 
14% (38)    👎

能不能解惑为啥要stack of map
如果只记住上一个letter不可以吗

补充内容 (2023-02-08 15:04 +8:00):
尝试写了一下 有括号的就不会了 感觉类似basic calculator1 3


补充内容 (2023-02-08 15:16 +8:00):
"""
A3B2 -> (A,3), (B,2)
(A3B2)2 -> (A,6), (B,4)
A2(A3B2)2 -> (A,8), (B,4)
"""

import collections


def trans(s):
  letter = ""
  hm = collections.defaultdict(int)
  num = 0
  i = 0

  while i < len(s):
    if s[i].isalpha():
      if letter != "":
        hm[letter] += num
      num = 0
      letter = s[i]
    elif s[i].isdigit():
      num = num * 10 + int(s[i])


    elif s[i] == "(":
      hm_inside, length = trans(s[i + 1:])
      i += length+1
      for k in hm_inside.keys():
        print(k,"k",hm_inside[k])
        hm[k] += int(s[i]) * hm_inside[k]
        print(k, "k", hm[k])

    elif s[i]==")":
      if letter != "":
        hm[letter] = num
      return hm, i+1
    i += 1

  if letter != "":
    hm[letter]+= num
  return list(hm.items())


print(trans("A2(A3B2)2C9"))

试试了几个 好像都是对的
回复

使用道具 举报

地里匿名用户
匿名用户-4ESZC  2023-2-9 00:04:12
本楼: 👍   0% (0)
 
 
0% (0)   👎
小亩_b53bbb8 发表于 2023-2-8 01:44
能不能解惑为啥要stack of map
如果只记住上一个letter不可以吗

不是很熟悉C++语法,不过大概看了一下你这应该是用的recursion解的?用stack原理也一样,只不过是insert new map instead of calling recursion function
回复

使用道具 举报

小亩_b53bbb8 2023-2-9 03:11:51 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   85% (219)
 
 
14% (38)    👎
匿名用户 发表于 2023-2-8 08:04
不是很熟悉C++语法,不过大概看了一下你这应该是用的recursion解的?用stack原理也一样,只不过是insert  ...

是的recursion本质上也是stack

补充内容 (2023-02-09 03:46 +8:00):
"""
A3B2 -> (A,3), (B,2)
(A3B2)2 -> (A,6), (B,4)
A2(A3B2)2 -> (A,8), (B,4)
"""

import collections


def trans(s):
  letter = ""
  hm = collections.defaultdict(int)
  num = 0
  i = 0

  while i < len(s):
    if s[i].isalpha():
      if letter != "":
        hm[letter] += num
      num = 0
      letter = s[i]
    elif s[i].isdigit():
      num = num * 10 + int(s[i])


    elif s[i] == "(":
      if letter != "":
        hm[letter] += num
        num=0
      hm_inside, length = trans(s[i + 1:])
      print(hm_inside,"hm_inside")
      i += length+1
      if not s[i].isdigit():
        for k in hm_inside.keys():
          hm[k] += hm_inside[k]

      else:
        factor = 0
        while  i<len(s) and s[i].isdigit() :
          factor = factor * 10 + int(s[i])
          i += 1

        for k in hm_inside.keys():
          hm[k] += factor * hm_inside[k]
        i-=1

    elif s[i]==")":
      if letter != "":
        hm[letter] = num
      return hm, i+1
    i += 1

  if letter != "":
    hm[letter]+= num
  return list(hm.items())


print(trans("A2((A3B2)23C19)2"))
[('A', 140), ('C', 38), ('B', 92)]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表