lintcode23. 字典中的子序列

给一字串s和单词的字典dict,请返回字典中所有是s的子序列的单词。
子序列的定义是:如果字符串s通过去掉部分字母可以变成字符串t,那么t是s的子序列

样例
样例 1:

输入:"lintcode"["de","ding","co","code","lint"]
输出:["de","co","code","lint"]
解释
我们可以删去"lintco"得到"de"。
我们可以删去"lint""de"得到"co"。
我们可以删去"lint"得到"code"。
我们可以删去"code"得到"lint"。
我们无法得到"ding"。
样例 2:

输入:"a"[]
输出:[]
解释:字典为空
挑战
如果字符串长度s小于等于100\,000100000应当怎么做?

注意事项
字符串s的长度小于等于1\,0001000。

字典中的单词数量小于等于1\,0001000,单词长度总和小于等于1\,0001000。

所有字符串只包含小写字母。
class Solution {
public:
    /**
     * @param s: a string
     * @param wordDict: A set of words.
     * @return: All correct words
     */
    vector<string> wordSubsequence(string &s, unordered_set<string> &wordDict) {
        // write your code here
        int len=s.size();
        vector<string> res;
        if(len==0) return res;
        for (auto word : wordDict) {
            /* code */
            if(search(s,word))res.push_back(word);
        }
        return res;
    }
    bool search(string s,string word)
    {
        int sindex=0;
        for (int i = 0; i < word.size(); i++) {
            /* code */
            while(sindex<s.size()&&s[sindex]!= word[i]) sindex++;
            if(sindex==s.size()) return false;
            sindex++;
        }
        return true;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值