算法随打:拼写单词

打印 上一主题 下一主题

主题 1047|帖子 1047|积分 3141

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述

   给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。
  假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。
  留意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。
  返回词汇表 words 中你掌握的所有单词的 长度之和
  示例 1:
  1. <strong>输入:</strong>words = ["cat","bt","hat","tree"], chars = "atach"
  2. <strong>输出:</strong>6
  3. <strong>解释: </strong>
  4. 可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。
复制代码
示例 2:
  1. <strong>输入:</strong>words = ["hello","world","leetcode"], chars = "welldonehoneyr"
  2. <strong>输出:</strong>10
  3. <strong>解释:</strong>
  4. 可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。
复制代码
提示:
  

  • 1 <= words.length <= 1000
  • 1 <= words.length, chars.length <= 100
  • 所有字符串中都仅包罗小写英笔墨母
  思绪一

1.number用于累计可以被chars完全删除的单词的总长度。index用于存储当前处理的单词的长度。
2.使用外层循环遍历words数组中的每个单词。在处理每个单词之前,先将该单词的长度存储在index变量中。内层循环遍历chars字符串中的每个字符。使用replaceFirst方法尝试删除words中出现的chars.charAt(j)字符的第一个匹配项。
3.如果经过更换操作后,words变为空字符串,则表示该单词可以完全被chars中的字符组合删除。在这种情况下,将原始单词的长度(存储在index中)加到number上,并跳出内层循环。方法最终返回所有能被chars中字符完全删除的单词的长度之和。
代码展示 

  1. public static int countCharacters(String[] words, String chars) {
  2.         int number=0;
  3.         int index;
  4.         for(int i=0;i<words.length;i++){
  5.             index=words[i].length();//记录本次字符串的长度。
  6.             for(int j=0;j<chars.length();j++){
  7.                 words[i] = words[i].replaceFirst(String.valueOf(chars.charAt(j)), "");
  8.                 if(words[i].isEmpty()){//如果字符串全部成功替换,则记录下来。
  9.                     number=number+index;
  10.                     break;//结束内层循环。
  11.                 }
  12.             }
  13.         }
  14.         return number;
  15.     }
  16. }
复制代码
 缺点:时间复杂度和空间复杂度出奇的高。能通过也是奇迹。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

傲渊山岳

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表