1160. 拼写单词

随机了一题

给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。

假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。

注意:每次拼写时,chars 中的每个字母都只能用一次。

返回词汇表 words 中你掌握的所有单词的 长度之和。

 

示例 1:

输入:words = ["cat","bt","hat","tree"], chars = "atach"
输出:6
解释: 
可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。
示例 2:

输入:words = ["hello","world","leetcode"], chars = "welldonehoneyr"
输出:10
解释:
可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

记录个很慢的解法

发现个事,在leecode不管用多少内存消耗,全部都是击败了100%的用户,但是执行用时还是可以参考下的

class Solution {
    public int countCharacters(String[] words, String chars) {
        /*
            基本思路,
            把String拆开,toCharArray
            存到HashMap中,key存字母,value存字母出现的次数
        然后拿数组中拆出的map到chars中拆出的map中getKye
        最后统计下成功的单词数
        */
      HashMap<Character,Integer> charM= toAsci(chars);
            //存charM当前key的value
    	   int count=0;
           //判断foreach是否中途终止
    	    boolean cou=true;
           //在foreach中统计字母出现次数
    	   int val=0;
           //最终计数用来return的
    	   int retur=0;
           int wordsLength=words.length;
           for(int i=0;i<wordsLength;i++){
        	   HashMap<Character,Integer> wordM= toAsci(words[i]);
        	   for(Map.Entry<Character,Integer> entry:wordM.entrySet()) {
        		   count=	charM.get(entry.getKey())==null?0:charM.get(entry.getKey());
        		;
        		 if(count==0||count<entry.getValue()) {
                     cou=false;
        			 continue;
        		 }
        		 charM.put(entry.getKey(),--count);
        		
        		 val+=entry.getValue();
        	   }
        	   if(cou) {
        		   retur+=val;
        	   }val=0;
        	   cou=true;
        	   charM= toAsci(chars);
           }
          return retur;
    }
    //把字符串拆成HashMap 
 public static HashMap<Character,Integer> toAsci(String chars){
	   	char[] ch=chars.toCharArray();
	   	HashMap<Character,Integer> hashM=new HashMap<Character,Integer>();
           int chLength=ch.length;
	   for(int i=0;i<chLength;i++) {
		   int c=  (hashM.get(ch[i])==null)?1:hashM.get(ch[i])+1;
		   hashM.put(ch[i],c);
	   }
	   
       return hashM;
   }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值