leetcode916
单词子集
我们给出两个单词数组 A 和 B。每个单词都是一串小写字母。
现在,如果 b 中的每个字母都出现在 a 中,包括重复出现的字母,那么称单词 b是单词 a 的子集。 例如,“wrr” 是 “warrior” 的子集,但不是 “world” 的子集。
如果对 B 中的每一个单词 b,b 都是 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的更多相关文章
- [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 ...
随机推荐
- 定时任务 Wpf.Quartz.Demo.4
本文继续介绍定时任务 Wpf.Quartz.Demo.3的一些小细节, 代码也请前往第3节下载. 1.RichTextBox右键菜单 <RichTextBox.ContextMenu> ...
- OSLab多进程
日期:2019/3/23 内容:Linux下与多进程相关的函数. 进程基本知识 定义 应用程序关于某数据集合上的一次运行活动. 特点 ·操作系统进行资源分配和调度的基本单位 ·进程是程序的一次 ...
- 阿里云ECS 介绍
1.阿里云产品概述 1 2.阿里云基础架构介绍 2 3. ECS产品概念和功能 6 4. ECS运维管理和API 12 1.阿里云产品概述 2.阿里云基础架构介绍 ECS 主要有五个主要的组成部分 作 ...
- python------virtualenv&virtualenvwrapper的使用
virtualenv virtualenv 的作用:为单个项目创建独立的python虚拟环境 virtualenv的使用 : 1.通过如下命令安装virtualenv $ sudo pip insta ...
- python packaging
python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑).主要表现在下面几个方面: 这几个包管理工具有什么不同? * distutils * ...
- flask_ Mongodb 的语法-排序
MOngoDB的排序是挺有用的 ,跟MySQL有明显的区别 .. 它的原生语法的第一个参数为条件限定,第二个参数为排序字段 db.news.find({},{'_id':1}) #1是升序 ...
- 检查iOS项目中是否使用了IDFA
(1)什么是IDFA 关于IDFA,在提交应用到App Store时,iTunes Connect有如下说明: 这里说到检查项目中是否包含IDFA,那如何来对iOS项目(包括第三方SDK)检查是否 ...
- javascript数据结构与算法---检索算法(二分查找法、计算重复次数)
javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){ if ( ...
- (转)Python3之requests模块
原文:https://www.cnblogs.com/wang-yc/p/5623711.html Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了.它是为另 ...
- 2014.10.5 再次学习LINUX
mesg 发送信息给root y n write/talk 写消息给 wall 给所有用户发送消息 ps -aux ps -elF pstree 命令行跳转:CTRL+a行首 CTRL+e行尾 CTR ...