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 ...
随机推荐
- mongdb window 服务安装批处理
安装mongodb 3.x 安装完毕后 将以下代码保存为批处理 然后用管理员权限执行就可以成功安装服务了 cd C:\Program Files\MongoDB\Server\3.0\binmongo ...
- QT中的一些信号
QLineEdit: 通过改变QLineEdit的echoMode(),可以设置其属性,比如以密码的形式输入. 文本的长度可以由maxLength()限制,可以通过使用validator()或者inp ...
- [海外干货] BlackHat 2017 首日议题的所有 PPT以及材料
今年是 Black Hat 举办的第 20 个年头,高温酷暑也挡不住全世界黑客和安全人员奔赴拉斯维加斯的热情.毕竟这可是一年一度的盛大狂欢啊.今年的 BHUSA 从美国东部时间时间 7 月 22 日( ...
- 安装openvpn
1.安装服务器端openvpn yum install -y openvpn easy-rsa 如果已存在的yum源中找不安装文件,则可通过以下安装epel yum源 rpm -ivh http:/ ...
- 【hyperscan】hyperscan开源了!
hyperscan开源了! 官网:https://01.org/zh/hyperscan 1. 新闻背景 当地时间10月19日,intel将它的高速正则表达式匹配引擎hyperscan开源了,版本4. ...
- 解决修改css或js文件,浏览器缓存更新问题。
在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css.js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从 ...
- 在mac上安装xcode时 弹出需要关闭itunes的警告 解决办法
1 首先打开终端(在工具栏中:前往-->使用工具-->终端) 2 输入 ps -ef | grep iTunes 回车 501 300 207 0 11:58上午 ?? ...
- [每天解决一问题系列 - 0001] Javascript apply和 call对比
相同点: 每个函数都包含这两个原生的方法 他们两个的效果是一样的,用于在特定的作用域下执行函数,本质上是设置函数内this对象的值. 不同点: 传入的参数类型不同 . apply(函数作用域,arra ...
- SSH远程连接Ubuntu Server
Ubuntu默认没有安装openssh-server包,故从远程计算机通过SSH连接时会收到Connection refused的消息. 首先在Ubuntu检查/etc/ssh/sshd_config ...
- android的电话监听
android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; i ...