一定要是一组数组完全包含另一组数组里的全部值,长度可以不同.一个值不同则不符合要求.
在Java 里有个方法叫 list.containsAll()
public static void main(String args[]){
String[] a = {"01", "02", "03", "04","05"};
String[] b = {"01", "05", "03"};
System.out.println("isContains = " + isContains(a, b));
}
private static boolean isContains(String[] a,String[] b) {
List<String> listA = Arrays.asList(a);
List<String> listB = Arrays.asList(b);
return listA.containsAll(listB);
}
javascript的实现
var p1=[77,9999,1];
var p2=[1,2,0,9999,4,65,77];
function isSubArray(p1,p2){
var i= 0,j= 0,resultArray=[];
p1.sort();
p2.sort();
if(p1[0]>p2[p2.length-1]||p1[p1.length-1]<p2[0]||p1.length>p2.length){
return false;
}
while(i<p1.length){
while(j<p2.length){
if(p1[i]>p2[j]){
j++;
}else if(p1[i]<p2[j]){
i++;
break;
}else{
resultArray.push(p1[i]);
i++;
j++;
}
}
if(j==p2.length){
break;
}
}
return resultArray.length===p1.length;
}
!isSubArray(p1,p2)?console.log('p1 isn\'t subset of p2'):console.log('p1 is subset of p2');
先找到最长的数组,然后循环短的数组并判断元素是否在长数组中
public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
String[] strArr1={"ee","aa","bb","cc"};
String[] strArr2={"aa","bb","cc","dd","44"};
System.out.println(Main.subContain(strArr1,strArr2));
}
public static boolean subContain(String[] strArr1, String[] strArr2) {
if (null == strArr1 || null == strArr2) {
return false;
}
boolean flag = true;
if (strArr2.length > strArr1.length) {
String[] temp;
temp = strArr1;
strArr1 = strArr2;
strArr2 = temp;
}
for (String str : strArr2) {
if (!Arrays.asList(strArr1).contains(str)) {
flag = false;
break;
}
}
return flag;
}
}
判断两个数组的交集长度是否等于最小的数组长度,用到了第三方的jar包
public class Main {
public static void main(String[] args) throws CloneNotSupportedException {
String[] strArr1 = {"aa", "bb", "cc"};
String[] strArr2 = {"aa", "bb", "cc", "dd", "44"};
System.out.println(Main.subContain(strArr1, strArr2));
}
public static boolean subContain(String[] strArr1, String[] strArr2) {
if (null == strArr1 || null == strArr2) {
return false;
}
Collection collection = org.apache.commons.collections.CollectionUtils.intersection(Arrays.asList(strArr1), Arrays.asList(strArr2));
return collection.size() == Math.min(strArr1.length, strArr2.length);
}
}
15 回答8.4k 阅读
8 回答6.3k 阅读
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
SetA
和SetB
, 假设SetA
的长度小于等于SetB
, 那么SetA - SetB
就应该是空集, 才能满足你的要求. 否则就算不是C++标准库有一个库函数
std::set_difference
可以用来算集合的差集.PS: 两个集合必须是排过序的