B@rmaley.e><e,
Верно подмечено. (-: |
Цитата:
Это явный бред! Или может здесь кто-то панически боится циклов и микробов? Цитата:
|
Sweet, переделай в своём варианте второй цикл например под рекурсию и он будет соответствовать всем условиям =))
|
Sweet, таково условие - один цикл.
Vulkan, это все ерунда. Под одним циклом подразумевалась сложность O(n) (простой цикл по всем элементам строки). А поиск лазеек и дыр в правилах оставим юристам. |
Ой, извините! Я думал про один цикл - это не изначальное условие.
Впрочем, есть не один способ перебора без цикла, например, вот (внизу). Или вот, например:
String.prototype.index = function(x){
var string = this, l1 = this.length, l2 = x.length;
for(var i = 0; i < l1; i++) if(this[i] === x[0] && (function(){
var count = 0;
return (function(){
if( count === l2 ) return true;
if( string[i + count] === x[count++] ) return arguments.callee();
return false;
})();
}())) return i;
return -1;
};
|
Sweet,
Цитата:
|
Продолжаю утверждать, что это простой алгоритм, который не требует особых хаков в стиле JS и который решается одним циклом.
Пусть даны СТРОКА1 и СТРОКА2. Найти позицию вхождения СТРОКА2 в СТРОКА1 Выполните цикл не более чем i < (длина СТРОКА1 - (длина СТРОКА2 / 2)) Сравнивайте начальный (0) и конечный символы (длина СТРОКА2 - 1) из СТРОКА2 с текущими позициями в СТРОКА1 (i) и (i + длина СТРОКА2 - 1), соответственно. Повторяйте сравнение. |
Т.к. теоретически точка начала совпадений мот быть в любой(каждой) позиции простым циклом нельзя(без встроенных функций[любых]).
Мой вариант:
String.prototype.at = function(str) {
var tl = this.length, sl = str.length;
if(tl >= sl) {
for(var i=0, j=0; i<tl; i++) {
if(this[i] == str[j]) {
++j; if(sl == j) {return ++i-j;}
}
else{
if(this[i] == str[0]) {j=1;}
else {i-=j; j=0;}
}
}
return -1;
}
else {
return -1;
}
}
var s1 = 'aababababaO_o', l1 = 'ababaO', l2 = 'abac', l3 = 'aa', l4 = 'O_o';
alert( [
[s1.at(l1), s1.indexOf(l1)],
[s1.at(l2), s1.indexOf(l2)],
[s1.at(l3), s1.indexOf(l3)],
[s1.at(l4), s1.indexOf(l4)]
].join('\n') );
|
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 10:41. |