“惟有编程、不断地编程,才能成为牛人。”
题目描述
给定一长字符串a和一短字符串b。请问,如何快速的判断出短字符串b中的所有字符是否都在长字符串a中?
解法一:排序后轮训
如果允许排序,可以考虑先排序后轮训。例如,可以先对这两个字符串中的字母进行排序,然后再对两个字符串一次轮询。
常规情况下,两个字符串的排序需要O(mlog(m))+O(mlog(m))次操作,之后的线性扫描需要O(m+n)次操作。关于排序的方法,可以采用常用的快速排序。
import java.util.Arrays;
public class StringContain1 {
public static boolean StringContain(String a, String b) {
char[] a1 = a.toCharArray();
char[] b1 = b.toCharArray();
Arrays.sort(a1);
Arrays.sort(b1);;
for(int i = 0, j =0; j < b.length(); ) {
while(i < a.length() && a1[i] < b1[j])
i++;
if(i >= a.length() || a1[i] > b1[j])
return false;
j++;
}
return true;
}
public static void main(String[] args) {
String a = "abcd";
String b = "bad";
boolean re = StringContain1.StringContain(a, b);
System.out.println(re);
}
}

本文探讨如何判断短字符串b的所有字符是否都在长字符串a中。提出三种解法:排序后轮训、素数相乘(因溢出问题不可行)和位运算。位运算解法通过整数代替散列表,实现空间复杂度为O(1)的解决方案。
最低0.47元/天 解锁文章
2883

被折叠的 条评论
为什么被折叠?



