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 ...
随机推荐
- Microsoft.Office.Interop.Excel.ApplicationClass can not embedded 的问题
用c#进行开发时,要做一个excel导入功能,期间使用到Microsoft.Office.Interop.Excel程序集,在用vs2008开发的时候没有报错,将这个程序集引用到vs2010的时候,便 ...
- 在EF中使用Expression自动生成p=>new Entity(){X="",Y="",..}格式的Lambda表达式灵活实现按需更新
一.基本介绍 回忆:最早接触Expression是在学校接触到EF的时候,发现where方法里的参数是Expression<Func<T,bool>>这么一个类型,当 ...
- NPOI 操作笔记
public static class ExcelUtil { // Methods public static DataTable GetDataTable(Stream stream) { HSS ...
- [学习笔记]我们追过的神奇异或(Trie树系列)
引言 刚学了\(Trie\)树,写篇博客巩固一下. 题目 首先安利一发\(Trie\)树模板 1.Phone List 2.The XOR largest pair 3.The xor-longest ...
- flask——包含,继承,宏
包含,继承,宏 都是为了提高代码的效率,都是为了防止代码的沉余,浪费资源 宏(macro) 可以把它看做Jinja2中的一个函数,他会返回一个模板或者HTML字符串,为了避免反复的编写同样的模板代 ...
- odoo开发笔记-tree列表视图拖拽排序
odoo列表tree视图 拖拽排序 实现效果: 实现方式: 模型中定义字段: class CusYourModel(models.Model): """ 你的模型 &qu ...
- hander消息机制原理(looper轮询监听机制)
基本原理 线程中调用Handler.sendMsg()方法(参数是Message对象),将需要Main线程处理的事件 添加到Main线程的MessageQueue中,Main线程通过MainLoope ...
- Java代码调用Oracle的存储过程,存储函数和包
Java代码调用存储过程和存储函数要使用CallableStatement接口 查看API文档: 上代码: java代码调用如下的存储过程和函数: 查询某个员工的姓名 月薪 职位 create or ...
- KMP算法的next函数求解和分析过程
转自 wang0606120221:http://blog.csdn.net/wang0606120221/article/details/7402688 假设KMP算法中的模式串为P,主串为S,那么 ...
- CentOS 7 安装配置 Gitlab
centos:http://www.centos.org/download/ download:https://about.gitlab.com/downloads/ update:https://g ...