几个答案用JAVA代码怎么实现呢?
比如,如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOM
答案是true,所有在string2里的字母string1也都有。如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOZ
答案是false,因为第二个字符串里的Z字母不在第一个字符串里。
怎么判断出ture or false?
1 从算法上讲,这需要O(n*m)次操作,其中n是string1的长度,m是string2的长度。就拿上面的例子来说,最坏的情况下将会有16*8 = 128次操作。
2 先对这两个字符串的字母进行排序,然后同时对两个字串依次轮询。两个字串的排序需要(常规情况)O(m log m) + O(n log n)次操作,之后的线性扫描需要O(m+n)次操作。同样拿上面的字串做例子,将会需要16*4 + 8*3 = 88加上对两个字串线性扫描的16 + 8 = 24的操作。(随着字串长度的增长,你会发现这个算法的效果会越来越好)
3 对第一个字串进行轮询,把其中的每个字母都放入一个Hashtable里(成本是O(n)或16次操作)。然后轮询第二个字串,在Hashtable里查询每个字母,看能否找到。如果找不到,说明没有匹配成功。这将消耗掉8次操作 —— 这样两项操作加起来一共只有24次。不错吧,比前面两种方案都要好。
---------------
以上我是在看面试题目的时候看到的一段话、
我想问下第2中方法以及第3中方法用JAVA代码怎么实现?线性扫描是什么意思?
------解决方案--------------------第3种:
import java.util.Hashtable;
public class HashTableDemo {
private static final String longStr = "ABCDEFGHLMNOPQRS";
private static final String shortStr = "DCGSRQPOM";
private static Hashtable<Integer,String> table = new Hashtable<Integer,String>();
public static boolean isContained(String longStr,String shortStr){
boolean flag = false;
for(int i = 0;i<longStr.length();i++){
table.put(i,longStr.charAt(i)+"");
}
for(int j = 0;j < shortStr.length();j++){
if(table.containsValue(shortStr.charAt(j)+"")){
flag = true;
continue;
}else{
flag = false;
}
}
return flag;
}
public static void main(String[] args) {
System.out.println(isContained(longStr,shortStr));
}
}
结果是正确的。。。
------解决方案--------------------5楼的同学,用HashSet就好了,不需要HashMap,类似这样:
Java code
public static boolean isInclude(String main, String sub) {
HashSet<Character> set = new HashSet<Character>();
for (char c : main.toCharArray()) set.add(c);
for (char c : sub.toCharArray()) if (!set.contains(c)) return false;
return true;
}
------解决方案--------------------
01./**
02. * 查找某些字符是否在另一个字符串里出现
03. *
04. * @author Java人(java2000.net)
05. */
06.public class Test {
07. /**
08. * @param args
09. */
10. public static void main(String[] args) {
11. String a = "abcd,efg";
12. String b = ")(*&^%$#@![]{},.///;:'? <>";
13. byte[] bb = new byte[256];
14. char[] cs = b.toCharArray();
15. for (char c : cs) {
16. bb[c] = 1;
17. }
18. cs = a.toCharArray();
19. for (char c : cs) {
20. if (bb[c] == 1) {
21. System.out.println(c);
22. }
23. }
24. }
25.}
------解决方案--------------------
Java code
char[] s2Arr = s2.toCharArray();
int len = 0;
for (char c : s2Arr) {
if(s1.indexOf(c) > 0){
len ++;
}
}
if(len == s2Arr.length){
return true;
}else{
return false;
}