我需要检查一个数组是否是另一个更大数组的子数组。(在句子(数组(中查找单词(子数组((。
我需要在递归算法中做到这一点。运行时将为 log(n(。
数组 :
char[] sentence = {'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'};
char[] word = {'l', 'l', 'o', 'w', 'o', 'r'};
char [] word = {'t', 'n' , 'p'};
我的代码:
static boolean wordFinder(char[] arr, char[] arr2, int l, int i) {
if (i == arr2.length - 1) {
return true;
}
if (arr[l] == arr2[i]) {
return wordFinder(arr, arr2, l + 1, i + 1);
}
if (l == arr.length - 1) {
return false;
}
return wordFinder(arr, arr2, l + 1, 0);
}
第三个数组仅用于检查代码。(代码有效,只需要知道运行时(。
听起来你有兴趣测试一个代码块需要多长时间才能运行。为此,只需以毫秒为单位记录前后的时间,然后减去两者。
long start_time = System.currentTimeMillis();
...
...
long end_time = System.currentTimeMillis();
System.out.println("Code completed in " + (end_time - start_time) + "milliseconds.");
还有纳秒的System.nanoTime()
。
程序的运行时复杂度为 O(n*m(。这里 n 是长度或arr
,m
是 arr2
的长度原因:因为在每个递归中,每个递归中实际上都有嵌套循环。一个循环遍历arr
,另一个循环是迭代arr
的每个元素的arr2
。
那么,最小复杂度将是O(n(。
更新:看看这个链接:检查字符串子字符串另一个