一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 811|回复: 2
收起左侧

[字符串] 问一道string pattern recognition的题

[复制链接] |试试Instant~ |关注本帖
liuyujiabnu 发表于 2014-10-25 07:32:49 | 显示全部楼层 |阅读模式

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

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
Given a pattern and a string - find if the string follows the same pattern
Eg:
Pattern : "a b b a", input: "cat dog dog cat" should return 1.
Pattern: "aaaa", input: "asdasdasdasd" should return 1.
Pattern: "aabb", input: "xyzabcxzyabc" should return 0.

hakase 发表于 2014-10-25 09:24:17 | 显示全部楼层
本帖最后由 hakase 于 2014-10-25 09:26 编辑
  1.     public static boolean matchPattern(String pattern, String target){
  2.         if(pattern.isEmpty()){
  3.             return true;
  4.         }else{
  5.             final int index = target.indexOf(pattern.charAt(0));
  6.             return index == -1 ? false : matchPattern(pattern.substring(1), target.substring(index));
  7.         }
  8.     }
复制代码
另外你的第一个test case应该是“a d d a”;
标准的解应该使用状态机,好麻烦。
回复 支持 反对

使用道具 举报

chy4483452 发表于 2014-10-26 12:28:36 | 显示全部楼层
本帖最后由 chy4483452 于 2014-10-26 13:25 编辑

偷懒直接输出true false了. 没做什么优化 抛砖引玉.

unordered_map<char, string> mapping;
bool matchPattern(string pattern, string str) {
    if (pattern.empty() || str.empty())
        return pattern.empty() && str.empty();

    char ch = pattern[0];
    if (ch == ' ')
        if (str[0] == ' ') return matchPattern(pattern.substr(1), str.substr(1));
        else return false;

    if (mapping.find(ch) == mapping.end()) {
        for (int i=1; i<=str.length(); i++) {
            mapping[ch] = str.substr(0, i);
            bool trymatch = matchPattern(pattern.substr(1), str.substr(i));
            if (trymatch) return true;
        }
        mapping.erase(ch);
    } else {
        if (mapping[ch] == str.substr(0, mapping[ch].length()))
            return matchPattern(pattern.substr(1), str.substr(mapping[ch].length()));
        else
            return false;
    }
    return false;
}
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-4 23:06

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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