回复: 11
跳转到指定楼层
上一主题 下一主题
收起左侧

一道谷歌面经 “字符串转换”/transision 个人总结

全局:

2018(10-12月) 码农类General 硕士 全职@google - 内推 - Onsite  | | Other | 应届毕业生

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

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

x
要送hc了攒个人品顺便回馈地里。为了方便大家看到题目之后搜索解答,在title里加上了“字符串转换面经”跟lintcode里一道类似题目1580 transition string的名字。虽然我并没有在onsite里遇到这道题目,但是在准备面经的过程中能感觉到这道题目至少对我这种水平差的人来说不太好理解。
加上follow up跨越的层级挺大的,很难一步到位,打算小结一下自己在理解这道题中看过的资料和step by step过程。

看过
https://www.1point3acres.com/bbs/thread-449578-1-1.html
https://www.1point3acres.com/bbs/thread-443299-1-1.html
的题目描述
“给定一个字符串s,问能不能转化成另一个字符串p,条件是每次转换要把所有相同的字母一起变动
例子如: abca(两个a一起变) -> dbcd(变c) -> dbed(变b) -> dced。所以abca能转化成dced,return true”
以及
https://www.1point3acres.com/bbs ... tml?_dsign=0a9ca5eb
中有大神给出的详细证明之后,我个人水平比较差,看了很久才摸索到一点门道。
所以打算写个比较intuitive跟naive一点的理解并把代码贴上,希望能对大家只是急于准备把题目做出来并在45分钟面试过程中能有点内容可讲可问提供点参考。
正确性不足的话希望大家多多包含指教别喷我,毕竟发面经已经不是义务,个人总结就更不是了。

接下来就从最简单case到general开始吧

entry
"莉蔻八就灵及其变种“
我知道这道题目是看一位大神总结的高频面经,当然关键就在这个“及其变种“是怎么变种了
我们从最简单对开始看

您好!
本帖隐藏的内容需要积分高于 200 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 200 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies



以上,祝大家都能offer多多。

评分

参与人数 19大米 +69 收起 理由
hkustliqi + 2 给你点个赞!
wangweiming800 + 1 给你点个赞!
llyvonne9 + 1 给你点个赞!
zdzapple + 3 给你点个赞!
qingzi1993 + 3 给你点个赞!

查看全部评分


上一篇:Intuitive Surgical 实习 面经+timeline
下一篇:布隆伯格电面20181219

本帖被以下淘专辑推荐:

推荐
飞人殿下 2018-12-29 06:16:31 | 只看该作者
全局:
感谢总结,祝好运哈
回复

使用道具 举报

推荐
thuxx 2019-10-5 11:00:50 | 只看该作者
全局:
  1. import java.util.*;

  2. // use any letter (26) to transfrom String a to String b, one time change all one type of letters
  3. // aacc => bbdd, aacc => bbcc => bbdd
  4. // abc => bca, must get the help of letters which are not in the input string, abc => bbc => ccc?, abc => ebc => eba => eca => bca
  5. // thus if all 26 distinct chars are in the 2 input string respectively, no possible ways only if abc...z => abc..z (no need to change)
  6. class Solution {
  7.     public boolean solution(String a, String b) {
  8.         if (a == null || b == null) {
  9.             return false;
  10.         }
  11.         if (a.length() != b.length()) {
  12.             return false;
  13.         }

  14.         Map<Character, Character> map = new HashMap<>();
  15.         for (int i = 0; i < a.length(); i++) {
  16.             Character ca = a.charAt(i);
  17.             Character cb = b.charAt(i);
  18.             map.putIfAbsent(ca, cb);
  19.             if (map.get(ca) != cb) {
  20.                 return false;
  21.             }
  22.         }

  23.         // find cycle, if map.keySet() and map.values() are all 26 distinct characters, and exist map.get(i) != i, which means cycle exist
  24.         int diff = 0;
  25.         Set<Character> set = new HashSet<>();
  26.         for (Character c : map.keySet()) {
  27.             set.add(map.get(c));
  28.             // if values() contains 26 distinct characters which means keySet() must contain 26 distinct characters
  29.             // abcd...z => abcd..z, abcd...z => bbcd...z(only 25), abcd...z => bacd..z
  30.             // has no redundant letter to do the 'bridge' transition
  31.             if (map.get(c) != c) {
  32.                 diff++;
  33.             }
  34.         }

  35.         if (diff > 0 && set.size() == 26) {
  36.             return false;
  37.         }

  38.         return true;
  39.     }

  40.     public static void canTransform(String a, String b, boolean result) {
  41.         Solution s = new Solution();
  42.         System.out.println(s.solution(a, b) == result);
  43.     }

  44.     public static void main(String[] args) {
  45.         canTransform("abcdefghijklmnopqrstuvwxyz","abcdefghijklmnopqrstuvwxya", true); // z => a, true
  46.         canTransform("abcdefghijklmnopqrstuvwxya","abcdefghijklmnopqrstuvwxyz", false); // a => a / z, false
  47.         canTransform("aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz","bbaaccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz", false);// false
  48.         canTransform("abba","baab", true); // true
  49.         canTransform("abaca", "ebece", true); // true
  50.         canTransform("abba","bbbb", true); // true
  51.         canTransform("abc","cba", true); // true
  52.         canTransform("aac","abc", false); // false
  53.         canTransform("abc", "bca", true); // true
  54.     }
  55. }
复制代码
回复

使用道具 举报

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

使用道具 举报

🔗
betterztt 2019-1-3 00:04:28 | 只看该作者
全局:
想请问一下至少转换的步数要怎么解呢?
回复

使用道具 举报

🔗
vividlau 2019-1-9 12:00:40 | 只看该作者
全局:
betterztt 发表于 2019-1-3 00:04
想请问一下至少转换的步数要怎么解呢?

感觉这种就是BFS,类似 LC 127,  752, 433
回复

使用道具 举报

🔗
 楼主| butzhang 2019-1-10 09:17:06 | 只看该作者
全局:
betterztt 发表于 2019-1-3 00:04
想请问一下至少转换的步数要怎么解呢?

不好意思回复晚了 求步数你可以看看链接里面大神的证明
因为不在这个true/false 判断的类别里 我就没写了 不然帖子太长
只是想抛砖引玉一下而已
祝好运
回复

使用道具 举报

🔗
dlwlrma 2019-1-11 14:22:26 | 只看该作者
全局:
感觉context 3有问题,hasloop里循环条件应该是while start in dic and start not in visited?按照你的写法,像s='abc', p='bca'是查不出来环的
回复

使用道具 举报

🔗
dertas1993 2019-1-23 15:59:49 | 只看该作者
全局:
楼主我感觉context2是不是有点问题 dabc -> ebca这个应该是有解的吧?intermediate就用ebca这里面的就可以。所以有loop也是可以的

补充内容 (2019-1-23 16:03):
哦不对换一个 edabc  ->  dcbca 这个也是有loop的
回复

使用道具 举报

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

使用道具 举报

🔗
pinkStar 2019-3-1 05:20:46 | 只看该作者
全局:
祝楼主好运!
回复

使用道具 举报

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

本版积分规则

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