本文主要是介绍leecode 1032. Stream of Characters,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1032. 字符流
按下述要求实现 StreamChecker 类:
StreamChecker(words):构造函数,用给定的字词初始化数据结构。
query(letter):如果存在某些 k >= 1,可以用查询的最后 k个字符(按从旧到新顺序,包括刚刚查询的字母)拼写出给定字词表中的某一字词时,返回 true。否则,返回 false。
示例:
StreamChecker streamChecker = new StreamChecker([“cd”,“f”,“kl”]); // 初始化字典
streamChecker.query(‘a’); // 返回 false
streamChecker.query(‘b’); // 返回 false
streamChecker.query(‘c’); // 返回 false
streamChecker.query(‘d’); // 返回 true,因为 ‘cd’ 在字词表中
streamChecker.query(‘e’); // 返回 false
streamChecker.query(‘f’); // 返回 true,因为 ‘f’ 在字词表中
streamChecker.query(‘g’); // 返回 false
streamChecker.query(‘h’); // 返回 false
streamChecker.query(‘i’); // 返回 false
streamChecker.query(‘j’); // 返回 false
streamChecker.query(‘k’); // 返回 false
streamChecker.query(‘l’); // 返回 true,因为 ‘kl’ 在字词表中。
提示:
1 <= words.length <= 2000
1 <= words[i].length <= 2000
字词只包含小写英文字母。
待查项只包含小写英文字母。
待查项最多 40000 个。
解题思路
1)首先是将words里面的词按照词的长度存储在 map<int , vector> tmpmap;
2)然后按照长度截取strtmp = str.substr(len - comLen) ;
3)比较strtmp 和 vector data数据比较;if “==” , return true ;else return fasle ;
注意:不能通过全部的测试用例;
class StreamChecker {private:vector<string> data ;string str = "" ;int len ;//map<int , int> datamap ;map<int , vector<string>> tmpmap ;public:StreamChecker(vector<string>& words) {int tmplen ;//map<int , vector<string>> tmpmap ;vector<string> strV ;for (auto tmp : words){tmplen = tmp.length() ;if (tmpmap.count(tmplen) <= 0)tmpmap[tmplen] = strV ;tmpmap[tmplen].push_back(tmp) ;}for (auto tmpv : tmpmap){for (auto tmpE : tmpv.second)data.push_back(tmpE) ;//datamap[tmpv.first] = data.size() ;}len = 0 ;}bool query(char letter) {str += letter ;len ++ ;int comLen ;string strtmp ;/*for(auto tpair : datamap){if (len >= tpair.first)comlen = tpair.second ;elsebreak ;}*/for (auto tpair : tmpmap){comLen = tpair.first ; if (comLen > len) break ;strtmp = str.substr(len - comLen) ;for (auto comD : tpair.second)if (strtmp == comD)return true ;}return false ;}
};
这篇关于leecode 1032. Stream of Characters的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!