单词子集

我们给出两个单词数组 A 和 B。每个单词都是一串小写字母。

现在,如果 b 中的每个字母都出现在 a 中,包括重复出现的字母,那么称单词 b是单词 a 的子集。 例如,“wrr” 是 “warrior” 的子集,但不是 “world” 的子集。

如果对 B 中的每一个单词 bb 都是 a 的子集,那么我们称 A 中的单词 a 是通用的

你可以按任意顺序以列表形式返回 A 中所有的通用单词。

示例 1:

  1. 输入:A = ["amazon","apple","facebook","google","leetcode"], B = ["e","o"]
  2. 输出:["facebook","google","leetcode"]
  3.  
  1. class Solution {
  2. public List<String> wordSubsets(String[] A, String[] B) {
  3. int[]isValid=new int[A.length];
  4. for(int i=0;i<B.length;i++){
  5. String b=B[i];
  6. //int []arrInit=new int[26];
  7.  
  8. for(int h=0;h<A.length;h++){
  9.  
  10. if(isValid[h]==-1)
  11. continue;;
  12. int[]arr=new int[26];
  13. for(int j=0;j<b.length();j++)
  14. arr[b.charAt(j)-'a']++;
  15.  
  16. String a=A[h];
  17. // System.out.print(arr['e'-'a']+" ");
  18.  
  19. for(int j=0;j<a.length();j++){
  20. if(arr[a.charAt(j)-'a']>0)
  21. arr[a.charAt(j)-'a']--;
  22. }
  23. // System.out.print(arr['e'-'a']+" ");
  24. for(int m=0;m<26;m++)
  25. if(arr[m]>0){
  26. isValid[h]=-1;
  27. }
  28. if(isValid[h]!=-1)
  29. isValid[h]++;
  30. // System.out.println(isValid[h]);
  31. }
  32.  
  33. }
  34. List<String>re=new ArrayList<String>();
  35. for(int i=0;i<A.length;i++){
  36. if(isValid[i]==B.length)
  37. re.add(A[i]);
  38.  
  39. }
  40. return re;
  41. }
  42. }

这段代码超时了,毕竟A,B的长度都10000了,复杂度怎么着也有10^8

优化一下之后通过

  1. class Solution {
  2. public List<String> wordSubsets(String[] A, String[] B) {
  3. int arrInit[]=new int[26];
  4. for(int i=0;i<B.length;i++){
  5. int []arrTmp=new int[26];
  6. String b=B[i];
  7. for(int j=0;j<b.length();j++)
  8. arrTmp[b.charAt(j)-'a']++;
  9. for(int j=0;j<26;j++){
  10. arrInit[j]=Math.max(arrTmp[j],arrInit[j]);
  11. }
  12.  
  13. }
  14. //System.out.println(arrInit['e'-'a']+" "+arrInit['o'-'a']);
  15. int[]isValid=new int[A.length];
  16. for(int i=0;i<A.length;i++){
  17. int arr[]=new int[26];
  18. System.arraycopy(arrInit,0,arr,0,26);
  19. String a=A[i];
  20. for(int j=0;j<a.length();j++){
  21. if(arr[a.charAt(j)-'a']>0)
  22. arr[a.charAt(j)-'a']--;
  23. }
  24. // System.out.print(arr['e'-'a']+" ");
  25. for(int m=0;m<26;m++)
  26. if(arr[m]>0){
  27. isValid[i]=-1;
  28. break;
  29. }
  30.  
  31. // System.out.println(isValid[i]);
  32. }
  33.  
  34. List<String>re=new ArrayList<String>();
  35. for(int i=0;i<A.length;i++){
  36. if(isValid[i]==0)
  37. re.add(A[i]);
  38.  
  39. }
  40. return re;
  41. }
  42. }

leetcode916的更多相关文章

  1. [Swift]LeetCode916.单词子集 | Word Subsets

    We are given two arrays A and B of words.  Each word is a string of lowercase letters. Now, say that ...

随机推荐

  1. mongdb window 服务安装批处理

    安装mongodb 3.x 安装完毕后 将以下代码保存为批处理 然后用管理员权限执行就可以成功安装服务了 cd C:\Program Files\MongoDB\Server\3.0\binmongo ...

  2. QT中的一些信号

    QLineEdit: 通过改变QLineEdit的echoMode(),可以设置其属性,比如以密码的形式输入. 文本的长度可以由maxLength()限制,可以通过使用validator()或者inp ...

  3. [海外干货] BlackHat 2017 首日议题的所有 PPT以及材料

    今年是 Black Hat 举办的第 20 个年头,高温酷暑也挡不住全世界黑客和安全人员奔赴拉斯维加斯的热情.毕竟这可是一年一度的盛大狂欢啊.今年的 BHUSA 从美国东部时间时间 7 月 22 日( ...

  4. 安装openvpn

    1.安装服务器端openvpn  yum install -y openvpn easy-rsa 如果已存在的yum源中找不安装文件,则可通过以下安装epel yum源 rpm -ivh http:/ ...

  5. 【hyperscan】hyperscan开源了!

    hyperscan开源了! 官网:https://01.org/zh/hyperscan 1. 新闻背景 当地时间10月19日,intel将它的高速正则表达式匹配引擎hyperscan开源了,版本4. ...

  6. 解决修改css或js文件,浏览器缓存更新问题。

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css.js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从 ...

  7. 在mac上安装xcode时 弹出需要关闭itunes的警告 解决办法

    1  首先打开终端(在工具栏中:前往-->使用工具-->终端) 2  输入 ps -ef | grep iTunes 回车  501   300   207   0 11:58上午 ??  ...

  8. [每天解决一问题系列 - 0001] Javascript apply和 call对比

    相同点: 每个函数都包含这两个原生的方法 他们两个的效果是一样的,用于在特定的作用域下执行函数,本质上是设置函数内this对象的值. 不同点: 传入的参数类型不同 . apply(函数作用域,arra ...

  9. SSH远程连接Ubuntu Server

    Ubuntu默认没有安装openssh-server包,故从远程计算机通过SSH连接时会收到Connection refused的消息. 首先在Ubuntu检查/etc/ssh/sshd_config ...

  10. android的电话监听

    android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; i ...