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

狗家昂赛特

🔗
catinclay 2016-11-19 00:01:03 | 只看该作者
全局:
fay19 发表于 2016-11-18 12:59
感谢楼主,那这样的话dfs是可以做出来的,我前几天看到别的人的面经有这个题,今天刚写了一个dfs的,test ...

求dfs思路...感谢
回复

使用道具 举报

🔗
zhan1612 2016-11-19 13:13:59 | 只看该作者
全局:
发一下第三题的encode, 但是感觉不优化, 咱们讨论下看看有没有更好的办法

复制代码
回复

使用道具 举报

🔗
zhan1612 2016-11-19 13:19:29 | 只看该作者
全局:
刚刚代码没沾上, 不知道怎么了。 发一下第三题的encode, 但是感觉不优化, 咱们讨论下看看有没有更好的办法
  1. //这里可以优化一下, 用KMP算法提前对string预处理, 也就是在string shortestEncodeString(string s)这个函数开始的时候预处理一下
  2. bool checkRepeating(string& s, int l, int r, int start, int end){
  3. if((end-start+1)%(r-l+1) != 0)
  4. return false;
  5. int len = r-l+1;
  6. bool res = true;
  7. for(int i=start; i<=end; i++){
  8. if(s[(i-start)%len+l] != s[i]){
  9. res = false;
  10. break;
  11. }
  12. }
  13. return res;
  14. }

  15. int getLength(int l1, int l2){
  16. return (int)(log10(l2/l1+1)+1);
  17. }

  18. string shortestEncodeString(string s){
  19. int len = s.length();
  20. 、、也就是在这个地方用kmp进行一下预处理
  21. vector< vector<int> > res(len, vector<int>(len, 0));
  22. for(int i=0; i<len; i++){
  23. for(int j=0; j<=i; j++){
  24. res[j][i] = i-j+1;
  25. }
  26. }

  27. unordered_map<string, string> record;

  28. for(int i=0; i<len; i++){
  29. for(int j=i; j>=0; j--){

  30. string temp = s.substr(j, i-j+1);
  31. if(record.find(temp) != record.end()){
  32. res[j][i] = record[temp].size();
  33. continue;
  34. }
  35. string ans = temp;
  36. for(int k=j; k<i; k++){

  37. string str1 = s.substr(j, k-j+1);
  38. string str2 = s.substr(k+1, i-k);
  39. if(res[j][i] > res[j][k] + res[k+1][i]){
  40. res[j][i] = res[j][k]+res[k+1][i];
  41. ans = record[str1] + record[str2];
  42. }

  43. if(checkRepeating(s, j, k, k+1, i) == true && res[j][i] > 2+getLength(k-j+1, i-k)+res[j][k]){    //如果有与处理的话可以o(1) 的时间知道要不要进入这个if, 现在是用函数比较,o(n).
  44. res[j][i] = 2+getLength(k-j+1, i-k)+res[j][k];
  45. ans = to_string((i-j+1)/(k-j+1)) + '[' + record[str1] +']';
  46. }
  47. }
  48. record[temp] = ans;
  49. }

  50. }

  51. return record[s];
  52. }
复制代码
回复

使用道具 举报

🔗
zhan1612 2016-11-19 13:22:23 | 只看该作者
全局:
我也是醉了, 这次没空格,不好意思啊。怎么删回复啊····再贴一次吧, 不要打我啊····
  1. bool checkRepeating(string& s, int l, int r, int start, int end){
  2.         if((end-start+1)%(r-l+1) != 0)
  3.                 return false;
  4.         int len = r-l+1;
  5.         bool res = true;
  6.         for(int i=start; i<=end; i++){
  7.                 if(s[(i-start)%len+l] != s[i]){
  8.                         res = false;
  9.                         break;
  10.                 }
  11.         }
  12.         return res;
  13. }

  14. int getLength(int l1, int l2){
  15.         return (int)(log10(l2/l1+1)+1);
  16. }

  17. string shortestEncodeString(string s){
  18.         int len = s.length();

  19.         vector< vector<int> > res(len, vector<int>(len, 0));
  20.         for(int i=0; i<len; i++){
  21.                 for(int j=0; j<=i; j++){
  22.                         res[j][i] = i-j+1;
  23.                 }
  24.         }

  25.         unordered_map<string, string> record;

  26.         for(int i=0; i<len; i++){
  27.                 for(int j=i; j>=0; j--){

  28.                         string temp = s.substr(j, i-j+1);
  29.                         if(record.find(temp) != record.end()){
  30.                                 res[j][i] = record[temp].size();
  31.                                 continue;
  32.                         }
  33.                         string ans = temp;
  34.                         for(int k=j; k<i; k++){
  35.                                
  36.                                 string str1 = s.substr(j, k-j+1);
  37.                                 string str2 = s.substr(k+1, i-k);
  38.                                 if(res[j][i] > res[j][k] + res[k+1][i]){
  39.                                         res[j][i] = res[j][k]+res[k+1][i];
  40.                                         ans = record[str1] + record[str2];
  41.                                 }

  42.                                 if(checkRepeating(s, j, k, k+1, i) == true && res[j][i] > 2+getLength(k-j+1, i-k)+res[j][k]){
  43.                                         res[j][i] = 2+getLength(k-j+1, i-k)+res[j][k];
  44.                                         ans = to_string((i-j+1)/(k-j+1)) + '[' + record[str1] +']';
  45.                                 }
  46.                         }
  47.                         record[temp] = ans;
  48.                 }

  49.         }

  50.         return record[s];
  51. }
复制代码
回复

使用道具 举报

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

使用道具 举报

🔗
fay19 2016-11-20 00:50:06 | 只看该作者
全局:
SidneyFan 发表于 2016-11-18 13:22
dfs加一个memory储存见过的string大概就变成dp了吧

恩恩,层主说的有理,我一会加一个hashmap memory一下试试看,感觉可行,谢谢层主
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

🔗
fay19 2016-11-20 04:29:32 | 只看该作者
全局:

表达能力不好,不知道解释清楚没,不明白可以再留言交流
回复

使用道具 举报

🔗
sunnyroom 2016-11-23 10:32:25 | 只看该作者
全局:
chestnut9919 发表于 2016-11-18 04:52
第三轮那个跟我一样,原来只是个warm up啊。。怪不得我HC挂了

第三轮时我的电面题; encode没弄出来,电面加面了
回复

使用道具 举报

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

本版积分规则

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