楼主: 匿名
跳转到指定楼层
上一主题 下一主题
收起左侧

🦴狗新鲜面经

🔗
spirit_room 2020-2-14 13:22:22 | 只看该作者
全局:
请问第一题followup怎么做?
回复

使用道具 举报

全局:
确定长度为m的字符串 存在或不存在 原字符串中 复杂度 O(n) , 从 1 到 n 二分查找 (如果m存在 那m+1肯定存在)
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-UDTR9  2020-2-14 14:42:31
lyronly 发表于 2020-2-14 13:37
确定长度为m的字符串 存在或不存在 原字符串中 复杂度 O(n) , 从 1 到 n 二分查找 (如果m存在 那m+1肯 ...

为啥是二分呢?举个例子,“ABB”的返回结果应该是“BA”,二分能做什么呢?
回复

使用道具 举报

全局:
论坛匿名账号 发表于 2020/02/14 14:42:31
为啥是二分呢?举个例子,“ABB”的返回结果应该是“BA”,二分能做什么呢?
二分找 最短字符串的长度
回复

使用道具 举报

🔗
spirit_room 2020-2-14 23:29:07 | 只看该作者
全局:
lyronly 发表于 2020-2-14 16:27
二分找 最短字符串的长度

题目要求是subsequence
回复

使用道具 举报

🔗
spirit_room 2020-2-15 01:00:17 | 只看该作者
全局:
本帖最后由 spirit_room 于 2020-2-15 01:01 编辑

第一题followup可以用递归或者DP做。实际也不难理解,但写代码也不容易,还是followup。

  1. vector<vector<string>> dp;
  2. string minNonSubsequence(string &s, int end, char last_c) {
  3.     string ans;
  4.     if (end == 0) {
  5.         ans.push_back(last_c);
  6.         return ans;
  7.     }
  8.    
  9.     if (dp[end-1][last_c - 'A'].size()) {
  10.         return dp[end-1][last_c - 'A'];
  11.     }
  12.    
  13.     if (s[end-1] == last_c) {
  14.         string tmp = minNonSubsequence(s, end - 1, 'A');
  15.         string tmp1 = minNonSubsequence(s, end - 1, 'B');
  16.         if (tmp.size() <= tmp1.size()) {
  17.             ans = tmp;
  18.         } else {
  19.             ans = tmp1;
  20.         }
  21.         
  22.         ans.push_back(last_c);
  23.     } else {
  24.         ans = minNonSubsequence(s, end - 1, last_c);
  25.     }
  26.    
  27.     dp[end-1][last_c - 'A'] = ans;
  28.     return ans;
  29. }

  30. int main() {
  31.     string s = "AAABAA";
  32.     dp = vector<vector<string>> (s.size(), vector<string>(2));
  33.     string ans = minNonSubsequence(s, s.size(), 'A');
  34.     cout << ans << endl;
  35.     string ans1 = minNonSubsequence(s, s.size(), 'B');
  36.     cout << ans1 << endl;
  37.    
  38.     return 0;
  39. }
复制代码
回复

使用道具 举报

全局:
长度确定后找subsequence是O(n)
回复

使用道具 举报

🔗
edging1218 2020-2-15 01:55:56 | 只看该作者
全局:
第一题follow up greedy O(n)
回复

使用道具 举报

🔗
queensberry 2020-2-15 03:16:14 | 只看该作者
全局:
本帖最后由 queensberry 于 2020-2-15 03:17 编辑

第一题followup

  1. public String mnse(String s) {
  2.     StringBuilder res = new StringBuilder();
  3.     char last = '#';
  4.     for (int i = -1; i < s.length(); i++) {
  5.         char cur = i >= 0 ? s.charAt(i) : '#';
  6.         char next = i < s.length() - 1 ? (s.charAt(i + 1) == 'A' ? 'B' : 'A') : 'A';
  7.         if (cur == last) {
  8.             res.append(next);
  9.             last = next;
  10.         }
  11.     }

  12.     return res.toString();
  13. }
复制代码
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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