こんにちは、読んでくれてありがとう。私は宿題に取り組んでいます。文字列と比較して、ある文字列が別の文字列のサブ文字列であるかどうかを確認するメソッドを作成しました。これを行うための組み込みメソッドがすでにあることを私は知っています。割り当ては私がそれらを使用することを許可していません。とにかく、以下のコードは機能しています。
Big-O表記を使用してアルゴリズムの複雑さを分析する必要があります。外側のループは文字列の長さと同じ回数だけ実行されるため、線形時間で実行されることがわかります。したがって:O(n)
内側のループは異なり、発生する場合と発生しない場合があります。発生する場合は、入力である2番目の文字列の長さより前に終了する場合があります。したがって: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;
}
}