查看: 1552| 回复: 1
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] Wildcard Matching这题我用backtracking来写怎么就速度那么慢?

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
额外写了个backtrack函数来写 而不是答案的那种two point的方法 感觉原理应该是一样的 但是我这个运行时间只超过了5%的人 还得再用cache来剪枝
是因为recursive stack的缘故么?但是这个不是应该只跟space有关么
  1. class Solution {
  2.    HashSet<String> failed;

  3.     public boolean isMatch(String s, String p) {
  4.         failed = new HashSet<>();
  5.         return backtrack(s, p, 0, 0);
  6.     }

  7.     private boolean backtrack(String s, String p, int si, int pi) {
  8.         if (pi == p.length() && si == s.length()) return true;
  9.         if (failed.contains(si + " " + pi)) {
  10.             // System.out.println(si + " " + pi);
  11.             return false;
  12.         }
  13.         boolean res = false;
  14.         if (pi == p.length() || (si == s.length() && p.charAt(pi) != '*')) res = false;
  15.         else if (p.charAt(pi) == '*') {
  16.             if (pi + 1 < p.length() && p.charAt(pi + 1) == '*') res = backtrack(s, p, si, pi + 1);
  17.             else {
  18.                 for (int i = si; i <= s.length(); i++) {
  19.                     if (backtrack(s, p, i, pi + 1)) {
  20.                         res = true;
  21.                         break;
  22.                     }
  23.                 }
  24.             }  
  25.         } else {
  26.             if (p.charAt(pi) != '?' && s.charAt(si) != p.charAt(pi)) res = false;
  27.             else res = backtrack(s, p, si + 1, pi + 1);
  28.         }
  29.         if (!res) failed.add(si + " " + pi);
  30.         return res;
  31.     }
  32. }
复制代码

上一篇:做 Machine learning 相关的职位,大家都用什么语言刷题?
下一篇:刷多少hard/多快做完hard才算准备充分?
🔗
 楼主| 刹那刹哪 2020-1-21 05:54:35 | 只看该作者
全局:
额下面不用回复了。。。看答案直接跳过了方法一 其实就是我这种 Recursion with memorisation
速度慢的原因是The first idea here is a recursion. That's a straightforward approach but quite time consuming because of huge recursion depth for long input strings.

回复

使用道具 举报

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

本版积分规则

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