1.2字符串的包含
给定一长字符串a和一短字符串b。请问,如何最快地判断出短字符串b中的所有字符是否都在长字符串a中?请编写函数bool StringContain(string &a, string &b)实现此功能。
例如:
如果字符串a是"ABCD",字符串b是"BAD",答案是true,因为字符串b中的字母都在字符串a中,或者说b是a的真子集。
如果字符串a是"ABCD",字符串b是"BCE",答案是false,因为字符串b中的字母E不在字符串a中。
如果字符串a是"ABCD",字符串b是"AA",答案是true,因为字符串b中的字母A包含在字符串a中。
package com.programming.test;
import java.util.Arrays;
/**
*
* @ClassName: Test02_2.java
* @Description:字符串的包含:排序后轮询
* 时间复杂度:两个字符串排序O(mlogm)+O(nlogn) 线性扫描O(m+n)
* @author: Henray
* @version:
* @Date: 2018年12月15日
*
*/
public class Test02_2 {
public static void main(String[] args) {
String a = "ABCD";
String b = "BCE";
System.out.println(StringContain(a, b));
}
public static boolean StringContain(String a, String b) {
char[] cha = a.toCharArray();
char[] chb = b.toCharArray();
Arrays.sort(cha);
Arrays.sort(chb);
for (int pa = 0, pb = 0; pb < chb.length;) {
while ((pa < cha.length) && (cha[pa] < chb[pb])) {
++pa;
}
if ((pa >= cha.length) || (cha[pa] > chb[pb])) {
return false;
}
++pb;
}
return true;
}
}
札记:
1.数组排序:Arrays.sort(ch);