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

领英onsite新题

全局:
octluck 发表于 2018-1-11 13:20
原来用work break II 的思路,结果没有写出来

恩,好思路。感觉确实是一类问题。谢谢楼主。
回复

使用道具 举报

🔗
 楼主| octluck 2018-1-11 13:42:55 | 只看该作者
全局:
楼上洗衣机成精 发表于 2018-1-11 13:30
恩,好思路。感觉确实是一类问题。谢谢楼主。

如果你写出来能贴一个吗?或者站内也行,多谢啦
回复

使用道具 举报

🔗
say543 2018-1-11 15:08:30 | 只看该作者
全局:
octluck 发表于 2018-1-11 13:07
这个我没问,应该没什么要求吧,但是不能替换的字母顺序不能变

需要考虑回朔吗ex : abb => acc => add if {b => c, cc=> dd} ?
回复

使用道具 举报

🔗
 楼主| octluck 2018-1-12 10:53:53 | 只看该作者
全局:
say543 发表于 2018-1-11 15:08
需要考虑回朔吗ex : abb => acc => add if {b => c, cc=> dd} ?

应该不需要吧
回复

使用道具 举报

全局:
octluck 发表于 2018-1-11 13:42
如果你写出来能贴一个吗?或者站内也行,多谢啦

额,想了一晚上没想出来dfs+mem要怎么实现。感觉要保证所有应该被替换的substring都被替换好难。

想了个DP的解法,不知道对不对:
  1. class Solution {
  2.         Map<String, String> dict;

  3.         public List<String> replaceString (String s1, List<String> s2, List<String> s3) {
  4.                 dict = new HashMap<String, String>();
  5.                 for (int i=0; i<s2.size(); i++) {
  6.                         dict.put(s2.get(i), s3.get(i));
  7.                 }
  8.                
  9.                 List<List<String>> dp = new LinkedList<List<String>>();
  10.                 dp.add(new LinkedList<String>());
  11.                 dp.get(0).add("");
  12.                
  13.                 for (int r=0; r<s1.length(); r++) {
  14.                         dp.add(new LinkedList<String>());
  15.                         for (int l=0; l<=r; l++) {
  16.                                 String key = s1.substring(l, r+1);
  17.                                 if (dict.containsKey(key)) {
  18.                                         String suffix = dict.get(key);
  19.                                         List<String> prefixs = dp.get(l);
  20.                                         for (String prefix: prefixs) {
  21.                                                 dp.get(r+1).add(prefix + suffix);
  22.                                         }
  23.                                 }
  24.                         }
  25.                         if (dp.get(r+1).size() == 0) {
  26.                                 List<String> prefixs = dp.get(r);
  27.                                 for (String prefix: prefixs) {
  28.                                         dp.get(r+1).add(prefix + s1.charAt(r));
  29.                                 }
  30.                         }
  31.                 }

  32.                 return dp.get(s1.length());
  33.         }
  34. }
复制代码
回复

使用道具 举报

🔗
bear3488 2018-1-12 13:29:56 | 只看该作者
全局:
我试着写了一个DFS的,没有lz说的memo的。。。不知道对不对

  1. class Solution{
  2.         vector<string>ReplaceStr(string S, vector<string>candidate, vector<string>target){
  3.         vector<string>res;
  4.         unordered_map<string,string>R;
  5.         for(int I = 0; I < candidate.size(); i++){
  6.                 R[candidate[i]] = target[i];
  7.         }
  8.         string cur = “”;
  9.         DFS(0,cur,S,R,res);
  10.         return res;

  11.         }
  12.         void DFS(int index, string & cur, string& S, unordered_map<string,string>&R, vector<string>&res){
  13.         if(index == S.length()){
  14.                 res.push_back(cur);
  15.                 return;       
  16.         }
  17.         bool canReplace = false;
  18.         for( auto it: R){
  19.                 if(index + it.first.length()-1 >= n)
  20.                         continue;
  21.                 string str = S.substr(index,it.first.length());
  22.                 if(str == it.first){
  23.                         canReplace = true;
  24.                         DFS(index + it.first.length(), cur+it.second,S,R,res);
  25.                 }
  26.         }
  27.         if(!canReplace)
  28.                 DFS(index+1,cur+S[index],S,R,res);
  29.         }
  30. };
复制代码

补充内容 (2018-1-12 13:30):
贴上去发现tab的好奇怪。。。。将就看吧。。。。
回复

使用道具 举报

🔗
say543 2018-1-12 15:53:34 | 只看该作者
全局:
我想memo 大概就是[i,j] pair 的substring 记录可能的substring 取代 这样吧 ?还是有更好的方法
回复

使用道具 举报

🔗
bear3488 2018-1-13 06:19:56 | 只看该作者
全局:
say543 发表于 2018-1-12 15:53
我想memo 大概就是 pair 的substring 记录可能的substring 取代 这样吧 ?还是有更好的方法

我想了一想,你说的应该是对的,就是dfs return 一个string, 比如 dsf(i,j,R,S,res,dpMemo),
用dfs往下走完了backtrack的时候记录一想s[i]到s[j]可以替换成什么string,下次再回溯到ij 的时候就不用再跑一遍了
回复

使用道具 举报

🔗
joyoox 2018-2-17 13:45:13 | 只看该作者
全局:
楼主求问timeline
回复

使用道具 举报

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

本版积分规则

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