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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章