
linkedin OA 是在Hackerrank平台上完成的,2道Medium题,分享下题目和思路。做linkedin OA编程题总卡壳?其实这两道高频题都有固定解题框架,找对方法就能快速突破。
linkedin OA 面经
Q1
题目:给定一个仅由数字组成的字符串,需要在保持原顺序的前提下,将其切分成若干子串,使每个子串表示的整数都是质数,并且必须使用完整个字符串;要求统计所有不同的切分方式数量,由于结果可能很大,最终返回对 (10^9+7) 取模的结果。
思路:dp[i] 表示从位置 i 开始的子字符串能够划分为质数的有效方法总数,最终返回 dp[0]。从字符串的末尾开始向前遍历,如果当前位置是 ‘0’,则跳过,因为数字不能以 0 开头。对于从 i 开始的每个子串,尝试将其转化为数字,并检查该数字是否是质数。如果是质数,则将 dp[i] 更新为当前值加上从该数字之后的分割方式数(即 dp[j+1])。最终的答案是 dp[0],即从位置 0 开始可以形成多少种有效的质数分割。
代码
def countPrimeStrings(s):
MOD = 10**9 + 7
n = len(s)
max_num = 10**6
is_prime = [False, False] + [True] * (max_num - 1)
primes = []
for i in range(2, max_num + 1):
if is_prime[i]:
primes.append(i)
for p in primes:
if i * p > max_num:
break
is_prime[i * p] = False
if i % p == 0:
break
dp = [0] * (n + 1)
dp[n] = 1
for i in range(n - 1, -1, -1):
if s[i] == '0':
continue
num = 0
for j in range(i, min(i + 6, n)):
num = num * 10 + int(s[j])
if num > max_num:
break
if is_prime[num]:
dp[i] = (dp[i] + dp[j + 1]) % MOD
return dp[0]
print(countPrimeStrings("11375"))Q2
题目:给定三个字符串 text、prefixString 和 suffixString,需要在 text 的所有子串中找到一个最优子串:它的开头部分要尽可能匹配 prefixString 的后缀,结尾部分要尽可能匹配 suffixString 的前缀,二者匹配长度之和定义为该子串的 textScore;题目要求返回 textScore 最大的那个子串,若有多个得分相同,则返回字典序最小的那个。
思路:枚举 text 的所有子串,对每个子串分别计算它的前缀与 prefixString 结尾的最长匹配长度,以及后缀与 suffixString 开头的最长匹配长度,两者之和作为该子串的得分(textScore),在遍历过程中不断更新最大得分;若出现得分相同的情况,则选择字典序最小的子串,最终返回最优结果。
了解更多
今天做了一场领英的,hackerrank两个题,半小时左右就pass了,linkedin得做了几十场了,都熟悉他家风格,没把握的都可以问,说下思路
如果你也在准备 linkedin 或其他大厂的 OA/VO,可以直接联系 interviewAid 了解对应的面试辅助和陪跑支持。如果你想找我辅助面试,或者用 linkedin 面经 中的原题 mock,感受最真实的 feedback,欢迎戳我。