单词子集

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

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

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

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

示例 1:

输入:A = ["amazon","apple","facebook","google","leetcode"], B = ["e","o"]
输出:["facebook","google","leetcode"]
class Solution {
public List<String> wordSubsets(String[] A, String[] B) {
int[]isValid=new int[A.length];
for(int i=0;i<B.length;i++){
String b=B[i];
//int []arrInit=new int[26]; for(int h=0;h<A.length;h++){ if(isValid[h]==-1)
continue;;
int[]arr=new int[26];
for(int j=0;j<b.length();j++)
arr[b.charAt(j)-'a']++; String a=A[h];
// System.out.print(arr['e'-'a']+" "); for(int j=0;j<a.length();j++){
if(arr[a.charAt(j)-'a']>0)
arr[a.charAt(j)-'a']--;
}
// System.out.print(arr['e'-'a']+" ");
for(int m=0;m<26;m++)
if(arr[m]>0){
isValid[h]=-1;
}
if(isValid[h]!=-1)
isValid[h]++;
// System.out.println(isValid[h]);
} }
List<String>re=new ArrayList<String>();
for(int i=0;i<A.length;i++){
if(isValid[i]==B.length)
re.add(A[i]); }
return re;
}
}

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

优化一下之后通过

class Solution {
public List<String> wordSubsets(String[] A, String[] B) {
int arrInit[]=new int[26];
for(int i=0;i<B.length;i++){
int []arrTmp=new int[26];
String b=B[i];
for(int j=0;j<b.length();j++)
arrTmp[b.charAt(j)-'a']++;
for(int j=0;j<26;j++){
arrInit[j]=Math.max(arrTmp[j],arrInit[j]);
} }
//System.out.println(arrInit['e'-'a']+" "+arrInit['o'-'a']);
int[]isValid=new int[A.length];
for(int i=0;i<A.length;i++){
int arr[]=new int[26];
System.arraycopy(arrInit,0,arr,0,26);
String a=A[i];
for(int j=0;j<a.length();j++){
if(arr[a.charAt(j)-'a']>0)
arr[a.charAt(j)-'a']--;
}
// System.out.print(arr['e'-'a']+" ");
for(int m=0;m<26;m++)
if(arr[m]>0){
isValid[i]=-1;
break;
} // System.out.println(isValid[i]);
} List<String>re=new ArrayList<String>();
for(int i=0;i<A.length;i++){
if(isValid[i]==0)
re.add(A[i]); }
return re;
}
}

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. C#中类的属性的获取

    /// <summary> /// 将多个实体转换成一个DataTable /// </summary> /// <typeparam name="T" ...

  2. 四种List实现类的对比总结

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.ArrayList 非线程安全 基于对象数组 get(int index)不需要遍历数组,速度快: it ...

  3. 杀掉所有 skynet 进程

    ps aux | grep skynet | awk '/config/{print $2}' | xargs kill

  4. Python-flask跨站请求伪造和跨站请求保护的实现

    图中 Browse 是浏览器,WebServerA 是受信任网站/被攻击网站 A,WebServerB 是恶意网站/点击网站 B. (1) 一开始用户打开浏览器,访问受信任网站 A,输入用户名和密码登 ...

  5. 重拾 BFC、IFC、GFC、FFC

    温故知新,巩固基础 从 FC 开始 FC,Formatting Context,格式化上下文,是 W3C CSS2.1 规范中的一个概念,定义的是页面中一块渲染区域,并且有一套渲染规则,它决定了其子元 ...

  6. Mac系统安装和卸载brew包管理

    brew 的官网地址  https://brew.sh/ 1.brew的安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercon ...

  7. 基于alpine用dockerfile创建的ssh镜像

    1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...

  8. odoo开发笔记 -- 用户配置界面如何增加模块访问权限

    在odoo设置界面,点击用户,进入用户配置界面,会看到: 访问权 | 个人资料菜单 在访问权 page菜单界面,可以看到系统预制的一些模块都会显示在这里, 那么,我们自己开发的模块如何显示在这块呢,从 ...

  9. 网络Socket编程UDP协议例子

    服务端代码 public class UDPChatServer { //通讯端口 private Integer port=8000; //数据报文的通讯通道对象 private DatagramC ...

  10. Ruby:Nokogiri

    阅读推荐: Nokogiri的用法我推荐三篇非常给力的文章: http://ruby.bastardsbook.com/chapters/html-parsing/ http://ruby.basta ...