亚马逊
时间线
2.25 笔试,3.17面试
笔试
第一题
搜索时要补充多少个字符,才能使关键词成为搜索词的子串,需要保证按顺序来匹配
Sample
input:
searchWord: "armaz"
resultWord: "amazon"
output:
2
需要在searchWord的结尾补上"on",才能使得"amazon"成为searchWord的子串
思路
从resultWord的第一个字符开始查找,最开始p=0,假设当前字符是c,当searchWord.indexOf(c, p) != -1时,令p=searchWord.indexOf(c, p)+1,也就是下次从母串的再下一位开始找
第二题
母串里最多可以拆出多少个子串,不用保证顺序
Sample
input:
s = "mononom"
t = "mon"
output:
2
可以拆两次,“mononom”
思路
先遍历一遍子串,用一个哈希表保存每个不同字符出现的频率(需求);
然后统计母串当中这些字符出现的频率(提供)。
对于t的每个字符c
times = 字符串中s中c出现了多少次
need = 字符串中t中c出现了多少次
for( t的每个字符c ){
ans = Math.min(ans, times/need);
}
一面
自我介绍
3-4分钟自我介绍
项目
聊实习工作,主要希望我讲一讲Memory Leaks有关的工作
是怎么分析问题的,怎么解决的
能不能举一个具体的例子
算法
Given a dictionary, a starting word and a ending word, find the shortest sequence to connect them
Sample:
mall
ball
bell
belt
给一个字典,一对单词(起点和终点),判断这个字典里能否构成一个序列,从起点走到终点并且每次只改变单词的一个字母;如果可以的话找出最短的序列,并打印,打印时每次改变的那个字母小写,其余字母大写。
二面
先聊项目
然后做算法题:
给两个字符串(代表两个超大的数),大数相乘
写完代码后的问题:
有哪些corner case需要考虑,对于字符串输入
一个 char[] 直接 toString 是有问题的