amazon 电面

leetcode 5 https://leetcode.com/problems/longest-palindromic-substring/description/
followup: dp 方法。improve

是指followup改用dp吗?
improve啥

就是用dp improve。其实复杂度没啥大变化,都是O(n^2);

用expand around center也ok吧
感觉dp用的space更多啊

三哥面试,问了20多分钟简历。然后写题目。妈的。感觉是不是又想挂人。

这个,好像是这个倾向

一开始就用的expand around center, 然后又用了dp,要求时间复杂度提高。

其实没啥提高,不过他说提高就提高吧。

dp(i, j) represents whether s(i ... j) can form a palindromic substring, dp(i, j) is true when s(i) equals to s(j) and s(i+1 ... j-1) is a palindromic substring. When we found a palindrome, check if it’s the longest one. Time complexity O(n^2).

public String longestPalindrome(String s) {
  int n = s.length();
  String res = null;
    
  boolean[][] dp = new boolean[n][n];
    
  for (int i = n - 1; i >= 0; i--) {
    for (int j = i; j < n; j++) {
      dp[i][j] = s.charAt(i) == s.charAt(j) && (j - i < 3 || dp[i + 1][j - 1]);
            
      if (dp[i][j] && (res == null || j - i + 1 > res.length())) {
        res = s.substring(i, j + 1);
      }
    }
  }
    
  return res;
}

这个空间明显比 expand 的方法多了 。。。 O(n^2).

拿到onsite了,两轮电面升了bar,onsite应该是l5.

两轮?还有一轮的面经呢?

是的。不过当时我悟出了他想干嘛,就写了。他的意思是第二个循环里面从右扫到左,如果j-i+1 < res.length()就跳过。当然,我举了个corner case:"abcdefg"这样的话还是O(n^2).然后他说在大量数据的情况下,这样的复杂度会是O(nlogn),我直接说,大哥,你说的对,我之前想到了这个思路,但是觉得没那么improve,还是你有经验。

还有一轮是design editor,完成 add, backspace, printcharAt, undo,的操作。主要用stack村就好了。秒了。

leetcode 原题吗?

不是吧?应该不是。

思路就是stringbuilder存text,然后stack存操作。还是蛮简单的。

电面升Bar?

电面决定onsite升不升bar

职位是l5的,但楼主只有1年多经验。

总之是好事