Найти, может ли вращение циклического c на заданном string1
произвести string2
?
Примеры: -
string1 = abcd
string2 = cdab
выход = true
строка1 = abc
строка2 = bac
выход = false
Я пытаюсь улучшить эту логику c, уменьшив сложность с n^2
до n
и n
до n-k
, заставив эту функцию checkRotation
завершать работу после нахождения первого true
.
//complexity n^2
def checkRotation(string1: String, string2: String): Boolean = {
for (i <- 0 until string1.length) yield {
for (j <- 0 until string2.length) yield {
if (string1.charAt(i) == string2.charAt(j)) {
string1 == string2.substring(j) + "" + string2.substring(0, j)
} else {
false
}
}
}
}.flatten.contains(true)
//complexity n
def checkRotation(string1: String, string2: String, index: Int = 0): Boolean = {
if (index < string2.length) {
if (string1.charAt(0) != string2.charAt(index)) {
checkRotation(string1, string2, index + 1)
} else {
string1 == string2.substring(index) + "" + string2.substring(0, index)
}
} else {
false
}
}
Есть улучшения? Спасибо !!!
РЕДАКТИРОВАТЬ
def checkRotation(string1: String, string2: String, index: Int = 0): Boolean = {
if (index < string2.length && (string1.charAt(0) != string2.charAt(index)
|| !string1.contains(string2.substring(index) + "" + string2.substring(0, index)))) {
checkRotation(string1, string2, index + 1)
} else {
index < string2.length
}
}