一亩三分地

 找回密码 注册账号

扫描二维码登录本站


Salarytics=Salary Analytics
查询工资数据
系统自动计算每年收入

码农求职神器Triplebyte
不用海投
内推多家公司面试

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250

深入浅出AB Test
从入门到精通
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
查看: 1429|回复: 2
收起左侧

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

[复制链接] |试试Instant~
我的人缘0

分享帖子到朋友圈
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (26)
 
 
0% (0)    👎

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

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

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.


上一篇:Dijkstra Good Numerals 求解
下一篇:小弟对于冒泡排序最最优情况有些不了解
我的人缘0
hakase 2014-10-25 09:24:17 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   98% (150)
 
 
1% (2)    👎
本帖最后由 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”;
标准的解应该使用状态机,好麻烦。
回复

使用道具 举报

我的人缘0
chy4483452 2014-10-26 12:28:36 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (3)
 
 
0% (0)    👎
本帖最后由 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;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法 - 不要多加空格: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版||一亩三分地

GMT+8, 2019-9-16 06:28

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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