目录
正在加载目录...

微软OA 2026 | Microsoft OA 2题 Hackerrank 考原题 时间非常紧

微软OA 2026 | Microsoft OA 2题 Hackerrank 考原题 时间非常紧

最近 Microsoft 26 summer SWE OA 算是顺利拿下了,hackerrank 两道题写的快的话30分钟以内可以做完,这段时间的OA / VO 的也挺集中,像 TikTok、Amazon、Meta、Adobe 都在陆续推进。 微软OA 整体不偏门,语言不限,Python / C++ / Java 都可以。

Microsoft OA Q1

题目:给定一个字符串 s,要求枚举该字符串的所有连续子串,将这些子串按字典序排序,并返回排在字典序最大的那个子串,子串是连续的,字符范围为 a–z,字符串长度不超过 100,这题本质是在所有子串中找出字典序最大的结果。

思路:所有子串里字典序最大的,一定等价于“所有后缀里字典序最大的”,因为任意子串都是某个后缀的前缀。用双指针比较两个后缀,从左到右淘汰较小的起点,最终留下的起点就是最大后缀的起点。

代码:

def maxSubstring(s):
    n = len(s)
    i = 0
    j = 1
    k = 0
    while j + k < n:
        if s[i + k] == s[j + k]:
            k += 1
        elif s[i + k] < s[j + k]:
            i = j
            j = i + 1
            k = 0
        else:
            j = j + k + 1
            k = 0
            if j == i:
                j += 1
    return s[i:]

Microsoft OA Q2

题目:给你一个长度为 nn的排列 pp(包含 1~nn且各不相同),定义一个数 kk是 balanced:如果存在一段连续子数组区间 [l,r][l,r],使得子数组 p[l..r]p[l..r]恰好由数字 1,2,,k1,2,\dots,k组成(顺序任意、每个出现一次,即是 的一个排列)。要求对每个 k=1..nk=1..n判断是否 balanced,并返回一个长度为 nn的二进制字符串:第 kk位为 '1' 表示 kkbalanced,否则为 '0'

思路:我们先把每个数字的位置记下来,用一个数组 pos[val] = index,这样能 O(1) 找到值 k 在哪,之后从 k = 1 开始往上扫,把目前 1..k 这些数出现过的最小下标 l 和最大下标 r 维护起来,如果当前这段区间长度 r - l + 1 正好等于 k,说明 1..k 这 k 个数正好连续出现,是一个排列,就记 1,否则记 0

代码

def countBalancedNumbers(p):
    n = len(p)
    pos = [0] * (n + 1)
    for i, val in enumerate(p):
        pos[val] = i
    l = pos[1]
    r = pos[1]
    ans = []
    for k in range(1, n + 1):
        if k > 1:
            idx = pos[k]
            if idx < l:
                l = idx
            if idx > r:
                r = idx
        if r - l + 1 == k:
            ans.append('1')
        else:
            ans.append('0')
    return ''.join(ans)

准备小结

如果你也在准备 微软 Intern 或其他大厂的 OA/VO,可以直接联系 interviewAid 了解对应的面试辅助和陪跑支持。如果你想找我辅助面试,或者用 Microsoft intern面经 中的原题 mock,感受最真实的feedback,欢迎戳我。

全网唯一一家支持 L6 以上 system design mock,只放真实面经。

求职辅助服务,是关于时间和品质的较量。咨询interviewAid,获取最专业的Tech求职辅助。

正文完