`

DropBox Interview - Repeating Pattern Match

 
阅读更多

You are given a pattern, such as "abab". You are also given a string, example "redblueredblue". You need to write a program that tells whether the string follows the given pattern or not.

Examples:
1) Pattern : “abba”, input: “redbluebluered” should return 1.
2) Pattern: “aaaa”, input: “asdasdasdasd” should return 1.
3) Pattern: “aabb”, input: “xyzabcxzyabc” should return 0.

bool isSamePatternHelper(string& pattern, int pIndex, string& input, int iIndex, unordered_map<char, string>& hash, unordered_map<string, char>& hashString) {
    if (pIndex == pattern.size() && iIndex == input.size()) {
        return true;
    }
    if (pIndex == pattern.size() || iIndex == input.size()) {
        return false;
    }
    char c = pattern[pIndex];
    if (hash.find(c) != hash.end()) {
        string toMatch = hash[c];
        for (int i = 0; i < toMatch.size(); i++) {
            if (iIndex >= input.size() || input[iIndex] != toMatch[i]) {
                return false;
            }
            iIndex++;
        }
        if (hashString.find(toMatch) == hashString.end() || c != hashString[toMatch]) {
          return false;
        }
        return isSamePatternHelper(pattern, pIndex + 1, input, iIndex, hash, hashString);
    } else {
        // try all possible
        bool flag = false;
        for (int i = iIndex; i < input.size(); i++) {
            string toMatch = input.substr(iIndex, i - iIndex + 1);
            hash[c] = toMatch;
            hashString[toMatch] = c;
            flag |= isSamePatternHelper(pattern, pIndex + 1, input, i + 1, hash, hashString);
            hash.erase(c);
            hashString.erase(toMatch);
            if (flag) {
                return true;
            }
        }
        return false;
    }
}
 
bool isSamePattern(string& pattern, string& input) {
    int patternSize = pattern.size();
    int inputSize = input.size();
    if (inputSize < patternSize)
        return false;
    unordered_map<char, string> hash;
    unordered_map<string, char> hashString;
    return isSamePatternHelper(pattern, 0, input, 0, hash, hashString);
}
 
int main(){
    string pattern = "abab";
    string input = "catdogcatdog";
    bool ret = isSamePattern(pattern, input);
    cout << ret << endl;
    return 0;
}

 

 

分享到:
评论

相关推荐

    Android代码-dropbox-sdk-java

    Dropbox Core SDK for Java 6 ... dropbox-core-sdk 3.0.11 If you are using Gradle, then edit your project's "build.gradle" and add this to the dependencies section: dependencies { //

    dropbox-sdk-java,一个用于Dropbox核心API的Java库。.zip

    **dropbox-sdk-java** 是一个专门为Java开发者设计的开源库,它使得与Dropbox的核心API进行交互变得简单而直观。这个库提供了全面的功能,包括文件上传、下载、管理,以及目录操作,同步,权限控制等,使开发人员...

    dropbox-android-sdk-1.6.3

    本文将深入探讨"dropbox-android-sdk-1.6.3"这个版本,帮助开发者理解和运用这一强大的云存储解决方案。 首先,我们要明确的是,"dropbox-android-sdk-1.6.3"是Dropbox针对Android平台提供的一个软件开发工具包...

    dropbox 2011-12-13最新客户端

    dropbox 2011-12-13最新Windows客户端,安装即可使用

    Laravel开发-laravel-dropbox-driver

    `laravel-dropbox-driver`是将这两者结合的工具,使开发者能够利用Dropbox的服务来存储应用程序的数据。 首先,我们需要了解Laravel的文件存储系统。Laravel提供了多种存储驱动,包括本地、FTP、S3等,而`laravel-...

    dropbox-mysql-backup-源码.rar

    本篇文章将详细解析一个名为“dropbox-mysql-backup-源码”的项目,它是一个利用Dropbox作为存储媒介的MySQL数据库备份解决方案。通过理解并应用这个源码,我们可以实现自动化、可靠的MySQL数据库备份,并将其安全地...

    dropbox-datastores-js

    《深入理解Dropbox-datastores-js:JavaScript SDK的克隆与应用》 在现代Web开发中,数据存储和同步是至关重要的环节。Dropbox-datastores-js是Dropbox为开发者提供的一款JavaScript SDK,它允许用户在Dropbox云...

    IOS应用源码Demo-录音笔记for ipad(录完上传到dropbox)-毕设学习.zip

    该压缩包文件“IOS应用源码Demo-录音笔记for ipad(录完上传到dropbox)-毕设学习.zip”提供了一个iOS应用的源代码示例,特别适合那些正在进行毕业设计或者想深入理解iOS应用程序开发的学生。这个应用的核心功能是...

    PyPI 官网下载 | dropbox-5.2-py3-none-any.whl

    在PyPI上,我们可以找到各种功能强大的Python库,其中就包括了我们今天要讨论的"dropbox-5.2-py3-none-any.whl"。 "dropbox-5.2-py3-none-any.whl"是Dropbox官方发布的Python库的二进制版本,用于与Dropbox云存储...

    Laravel开发-laravel-dropbox-storage-driver

    在压缩包文件"laravel-dropbox-storage-driver-master"中,可能包含了该驱动的源代码,包括安装指南、示例用法以及可能的自定义配置选项。开发者可以通过研究这些代码来更深入地理解如何在自己的Laravel项目中集成并...

    dropbox-sdk-js:Java版官方Dropbox API V2 SDK

    可以在上文档安装通过创建应用通过安装$ npm install --save dropbox从源安装: $ git clone https://github.com/dropbox/dropbox-sdk-js.git$ cd dropbox-sdk-js$ npm install安装后,请遵循我们的或阅读。...

    leetcode题库-Dropbox-Interview-Prep:Dropbox面试的准备材料

    leetcode题库Dropbox 现场面试 Dropbox 现场面试指南! Dropbox 面试题库非常小。 银行在中文论坛上已经有很多年了,我们希望让每个人都可以访问它,以便每个人都有平等的机会准备Dropbox现场面试! 备份链接: 行为...

    Python库 | dropbox-5.2.1-py3-none-any.whl

    首先,我们关注的核心文件是"dropbox-5.2.1-py3-none-any.whl",这是一个Python的 wheel 包格式,它是预编译的Python库,用于简化安装过程。Wheel包是Python社区为了提高分发和安装效率而推出的一种二进制格式,它...

    PyPI 官网下载 | dropbox-5.2.1-py3-none-any.whl

    资源来自pypi官网。 资源全名:dropbox-5.2.1-py3-none-any.whl

    dropbox-sdk-go-unofficial, Go的非官方 Dropbox SDK.zip

    dropbox-sdk-go-unofficial, Go的非官方 Dropbox SDK 面向 [UNOFFICIAL] 的 Dropbox 用于与Dropbox集成的非官方 go 。 使用 go 1.5 测试这菊花什么意思这里没有正式的Dropbox支持Bug 可能也可能无法修复并非所有的...

    Dropbox-Interview-Prep:Dropbox采访的准备材料

    Dropbox现场采访 Dropbox现场采访指南! Dropbox面试问题库很小。 该银行已经在中国论坛上存在很多年了,我们希望所有人都能使用它,以便每个人都有平等的机会准备Dropbox现场采访! 备用链接: : : 行为问题:...

    dropbox-api-command:用于访问Dropbox API的命令行界面

    dropbox-api put /tmp/foo.txt dropbox:/Public/ 运行dropbox-api help以获取更多选项。 描述 dropbox-api是访问Dropbox API的命令行界面。 ls 找 杜 同步 cp MV R M 麦克迪尔 得到 放 安装与设定 1.安装 1-a)...

    dropbox-sdk-obj-c:Dropbox API v2的官方Objective-C SDK

    用于在iOS或macOS上与Dropbox 集成的官方Dropbox Objective-C SDK。 完整的文档。 注意:请不要在生产中依靠master 。 请改用我们标记的(最好通过CocoaPods或Carthage获取),因为这些提交已经过更彻底的测试。 ...

Global site tag (gtag.js) - Google Analytics