楼主: 匿名
跳转到指定楼层
上一主题 下一主题
收起左侧

骨骼现场两道

 
🔗
wilbur_zzz 2020-12-6 09:47:03 | 只看该作者
全局:
bhlpku 发表于 2020-12-6 07:12
第一题的解法看的不太明白。如果这样做最坏情况下的时间复杂度不是O(n^2) 吗

第一题应该可以严格O(n)
请看我楼上的回复
回复

使用道具 举报

🔗
flyingforce 2020-12-6 11:20:31 | 只看该作者
全局:
何曾渡光 发表于 2020-12-6 08:55
如果有调换这两个,如果没有选择第一个调换,然后更新map

请问这句是什么意思呀,会存在调换一次只减 ...

是啊,当两个字符串是  acb 和abd 时候,不就是调换成 abc 这样dif -1

评分

参与人数 1大米 +2 收起 理由
何曾渡光 + 2 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
何曾渡光 2020-12-6 12:32:00 | 只看该作者
全局:
flyingforce 发表于 2020-12-6 11:20
是啊,当两个字符串是  acb 和abd 时候,不就是调换成 abc 这样dif -1

啊是这个意思 我理解错题了以为是t和s里的字符相互调换。。 谢谢!
回复

使用道具 举报

🔗
wilbur_zzz 2020-12-7 14:17:42 | 只看该作者
全局:
第二题怎么用递归做呢?等一个大神的答案
回复

使用道具 举报

🔗
johnnywsd 2020-12-7 14:40:40 | 只看该作者
全局:
试着写了第一题,欢迎指正。顺便求米。

  1. # coding: utf-8
  2. """
  3. 1. 给两个长度一样string S和T,如果在同一个位置上,两个string的字符不同,就是一个diff。
  4. 比如“abc”和"abd",最后一个字符分别是'c'和'd',这两个string的diff就是1。
  5. 现在我们要在S里交换两个字符的位置,使把S和T之间的diff尽量减到最小,
  6. 返回两个被交换的字符的位置。面试官应该要求的是O(n)
  7. """

  8. class Solution:
  9.     def swap_idx(self, S, T):
  10.         assert len(S) == len(T)
  11.         dct = {}

  12.         # delta_diff == 2
  13.         for idx, (s, t) in enumerate(zip(S, T)):
  14.             if s != t:
  15.                 key = f'{s}{t}'
  16.                 key_swap = f'{t}{s}'
  17.                 if key_swap in dct:
  18.                     return (dct[key_swap], idx)
  19.                 dct[key] = idx

  20.         # delta_diff == 1
  21.         dct1 = {}
  22.         for idx, (s, t) in enumerate(zip(S, T)):
  23.             if s != t:
  24.                 if t in dct1:
  25.                     return (dct1[t], idx)
  26.             dct1[s] = idx
  27.         return (None, None)


  28. ######################################################################
  29. # Tests
  30. ######################################################################
  31. import unittest

  32. class Test(unittest.TestCase):
  33.     def test_1(self):
  34.         s = 'abcd'
  35.         f = 'abdc'
  36.         sol = Solution()
  37.         # cd <-> dc
  38.         self.assertEqual(
  39.             sol.swap_idx(s, f),
  40.             (2, 3)
  41.         )

  42.     def test_2(self):
  43.         s = 'abcefdxad'
  44.         f = 'abdefcxcb'
  45.         sol = Solution()
  46.         # cd <-> dc
  47.         self.assertEqual(
  48.             sol.swap_idx(s, f),
  49.             (2, 5)
  50.         )

  51.     def test_3(self):
  52.         s = 'abcexxxyyy'
  53.         f = 'abxcxxxyyy'
  54.         sol = Solution()
  55.         # cd <-> dc
  56.         self.assertEqual(
  57.             sol.swap_idx(s, f),
  58.             (2, 3)
  59.         )

  60.     def test_4(self):
  61.         s = 'abcd'
  62.         f = 'abef'
  63.         sol = Solution()
  64.         # cd <-> dc
  65.         self.assertEqual(
  66.             sol.swap_idx(s, f),
  67.             (None, None)
  68.         )
  69. if __name__ == '__main__':
  70.     unittest.main(verbosity=2)
复制代码
回复

使用道具 举报

🔗
xiana406 2020-12-7 19:00:02 | 只看该作者
全局:
第一题就是bulls and cows的变体而且变更简单了。第二题的话BFS不一定是对。应该用递归,但是感觉写起来狠费劲啊。
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-SYMJF  2020-12-8 00:32:58
这个第二相当有难度啊。  先问一下,每次更改一个char, 我感觉整个表达式的结果都要重新计算啊? 有什么更好的办法吗?  另外用recursive, 感觉就是DFS啊, 就算找到结果,怎么能保证结果是最短的?


回复

使用道具 举报

地里匿名用户
🔗
匿名用户-DHPNW  2020-12-8 12:25:04
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-DHPNW  2020-12-9 11:55:54
第二题怎么做啊?递归怎么写?
回复

使用道具 举报

🔗
xiana406 2020-12-9 16:26:50 | 只看该作者
全局:
flyingforce 发表于 2020-12-6 06:58
前面一道题简单, 维护一个 Map  对象,保存所有没有找到match的t 的character以及位置, 任何时候看到一个 ...

你的思路应该是解决二元关系的?如果是A&B&C|D这种呢?分情况讨论肯定不行吧我想。
回复

使用道具 举报

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

本版积分规则

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