您好,感谢您的阅读。我正在做家庭作业。我创建了一种与字符串进行比较的方法,以查看一个是否是另一个的子字符串。我知道已经有一个内置的方法可以做到这一点。作业不允许我使用它们。无论如何,下面的代码正在工作。
我必须使用 Big-O 表示法来分析算法的复杂性。从我可以看到外循环以线性时间运行,因为它只是运行与字符串长度一样多的时间。因此:O(n)
内部循环是不同的,它可能会发生也可能不会发生,如果发生,它可能会在它输入的第二个字符串的长度之前完成。因此:O(logn)
所以在我看来复杂度是 O (n*logn)。这会简化为 O(n) 还是保持当前形式?或者我错了内循环是O(logn)?
import java.util.Scanner;
public class HW3q6 {
public static void main(String[] args) {
Scanner userInput = new Scanner( System.in );
System.out.println("Please enter the first string: ");
char[] charArray1 = userInput.nextLine().toUpperCase().toCharArray();
System.out.println("Please enter the second string: ");
char[] charArray2 = userInput.nextLine().toUpperCase().toCharArray();
System.out.println("The second string is a substring of the first: " + subString(charArray1, charArray2));
}
private static boolean subString(char[] charArray1, char[] charArray2) {
int counter = 0;
for (int i = 0; i < (charArray1.length + 1) - charArray2.length ; i++) {
if (charArray1[i] == charArray2[0]) {
for (int n = 0; n < charArray2.length; n++) {
if (charArray1[i+n] == charArray2[n]) {
counter++;
}
}
if (counter == charArray2.length) {
return true;
} else
counter = 0;
}
}
return false;
}
}