给定由N个字符组成的字符串A和由M个字符组成的字符串B,返回必须声明的次数A,使得B是重复字符串的子字符串。如果B永远不能是重复A的子串,那么你的函数应该返回-1。
EX:
A = "abcd"
B = "cdabcdab"
函数应返回3,因为在声明字符串A三次后,我们获得字符串“abcdabcdabcd”。字符串B是此字符串的子字符串。
尝试:目前停留在这里 - 在我开始编写代码之前尝试构造和算法 - 可以真正使用推送。我想要考虑到包含B作为子串之前A必须达到的最小长度。不确定这是否是正确的方法。
答案 0 :(得分:3)
首先要保持自我附加的A直到它变得大于或等于B(让我们称之为A +)。这将处理B完全位于A +内的情况。 如果它不是,那么这是从前面或后面围绕A +缠绕的情况。对于前包装,前缀A +带A,后备包装后缀A +带a。如果B现在是A +的子字符串,请在每次这些包装后检查。如果B即使是现在也不是子串,那么它将永远不会。
这是Java的解决方案。
$('.button1').on('click', function() {
animateDiv();
})
$(document).keyup(function(e) {
if (e.keyCode === 27 && $('.inner').hasClass('visible')) {
animateDiv();
}
})
function animateDiv() {
$('.inner').toggleClass('visible');
$('.inner').animate({
width: 'toggle',
}, 350);
}
答案 1 :(得分:0)
您的说明中包含大部分算法:
...在说明字符串A三次后,我们获得字符串" abcdabcdabcd"。字符串B是此字符串的子字符串。
所以你需要创建一个临时变量来保持"乘以" string,然后检查字符串B是否在临时变量中。您还需要一个变量来保存乘以A的次数。总之,虽然字符串B不包含在字符串A中,但请保持乘以字符串A.
以下是一个例子:
public class MyClass {
public static void main(String args[]) {
System.out.println(substrInMultiple("abcd", "cdabcdab"));
}
public static int substrInMultiple(String A, String B) {
String multiple = A;
int multipleCount = 1;
while(!multiple.contains(B)) {
multiple += A;
multipleCount++;
}
return multipleCount;
}
}
但是,请注意。它有可能有一个永远不会成为另一个子串的字符串,无论它乘以多少次。这将创造一个无限循环。
答案 2 :(得分:0)
public int solution(String A, String B) {
int count = 0;
while(A.length() < B.length()) {
A += A;
count++;
}
for(int i = 0; i < A.length() - B.length(); ++i) {
if(A.substring(i, i + B.length()).equalsIgnoreCase(B)) {
return count;
}
}
return -1;
}
答案 3 :(得分:0)
如果可能的话,最大重复次数将等于 1 + B.length / A.length 。
还要预先验证是否可以重复。
int formSubString(String A, String B) {
Set<Character> set1 = new HashSet<>();
for (char x: A.toCharArray()){
set1.add(x);
}
Set<Character> set2 = new HashSet<>();
for (char x: B.toCharArray()){
set2.add(x);
}
if (!set1.containsAll(set2)){
return -1;
}
int counter = 1;
// maxCounter would be more than 1 of B.length/A.length if possible
int maxCounter = B.length()/A.length()+1;
String newA = A;
while(counter<= maxCounter){
newA = newA+A;
counter++;
if (newA.contains(B)){
return counter;
}
}
return -1;
}