比如,如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRSString 2: DCGSRQPOM答案是true,所有在string2里的字母string1也都有。如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRSString 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代码怎么实现?线性扫描是什么意思?
String 1: ABCDEFGHLMNOPQRSString 2: DCGSRQPOM答案是true,所有在string2里的字母string1也都有。如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRSString 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代码怎么实现?线性扫描是什么意思?
解决方案 »
- 数据库连接错误
- 无比的迷茫。。
- 求教:Hibernate使用proxool连接池在执行session.beginTransaction()时老抛异常
- Hibernate存储过程调用报错,帮忙查找(急)
- 为什么说dom4j不可移植?
- 高分求javamail邮件系统,救命啊...
- struts 在tomcat下可以使用,但在resin 中却发生错误! 各位高手请进!
- 求助关于jtable更新的问题
- SQLite 总是报no such table
- struts2下在命令行编译Action类时报错---程序包com.opensymphony.xwork2不存在
- ibatis2动态传参的问题
- dwr框架,convert配置出问题了,各位大侠。。。。
哎、静候好心人啊~~~ JAVA代码纠结ing
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));
}
}
结果是正确的
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;
}
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.}
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;
}