leetcode1160:拼写单词
题目的意思很简单,就是要看字母表字符串能否拼出单词,能拼出就把单词的字母大小加上。
比较坑的是,每次拼写,字母表中的每个字符只能用一次,不然的话可以用find函数,循环遍历的时候find一下看该字符串在不在字母表里就行了。
每个字符只能用一次,这意味着要么你记录这个字符用没用过,要么你先记录单词的数量,然后用一次减一次。
这里使用了哈希法,把字母表字符串的个数记录下来。然后循环遍历,每次遇到个数为0的数就退出(字母不够用了),遇到个数不为0则减1。
由于在一次遍历中,map被操作过,故遍历完这个词后,重新赋值初始map,保证每次字母表字符串都和原始一样。
int countCharacters(vector<string>& words, string chars)
{int num = 0;map <char, int> mymap,mymap2;for(int i = 0; i < chars.size(); i++){mymap[chars[i]] ++;}mymap2 = mymap;for(int i = 0; i < words.size(); i ++){for(int j = 0; j < words[i].size(); j ++){if(string::npos == chars.find(words[i][j])){break;}//在a中查找b// 如果等于0,等于说已经没这个字母了mymap[words[i][j]] ==0 ? (j = words[i].size()) :(mymap[words[i][j]]--) ;if(j == words[i].size()-1){num += words[i].size();}}mymap = mymap2;}return num;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
