Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
bat-пропагандист
 Аватар для nekit270
981 / 183 / 76
Регистрация: 07.12.2022
Сообщений: 454
Записей в блоге: 12

Определить, одинакова ли большая часть двух строк

27.03.2024, 08:49. Показов 1347. Ответов 30

Студворк — интернет-сервис помощи студентам
Требуется определить, совпадает ли большая часть у двух строк.

Например:
"adfsd test string" и "test string3121" - true (совпадает большая часть строки)
"foo, bar, baz" и "qux, foo, quux" - false (совпадает меньшая часть строки)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2024, 08:49
Ответы с готовыми решениями:

Вычислить площадь N эллипсов, у которых большая ось одинакова: равна T, а длины меньших осей образуют последовательность
Прошу помочь с написание полного кода решения. Заранее СПАСИБО. Вычислить площадь N эллипсов, у которых большая ось одинакова равна...

Как быть в случае, если много форм на которых часть элементов одинакова
Как быть в случае, если много форм на которых часть элементов одинакова? Будет порядка 50 форм, возможно будет меньше, но верхняя часть...

Найти самую длинную общую часть двух строк
заданы две строки.Найти самую длинную их,общую часть.

30
 Аватар для voraa
1289 / 1267 / 187
Регистрация: 21.01.2024
Сообщений: 5,834
27.03.2024, 11:01
Лучший ответ Сообщение было отмечено nekit270 как решение

Решение

Большая или меньшая - не слишком определенное понятие.
Одна строка 5 символов, другая - 100. Но есть совпадение по 4. Для первой строки - это большая часть, для второй - меньшая.

Вот функция которая выдает максимальную длину совпадающей подстроки
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const s1 = 'adfsd test string';
const s2 = 'test string3121' 
 
const maxmatch = (s1, s2) => {
    let lmatch = 0;
    const l1 = s1.length;
    const l2 = s2.length;
    for (let b =0; b< l1; b++) {
        for ( let e = b+1; e<=l1; e++) {
            const s1s = s1.slice(b,e);
            if (s2.includes(s1s)) {
                const ls = e-b;
                if (lmatch < ls) {
                    lmatch = ls;
                }
            }
        }
    }
    return lmatch;
}
 
console.log(maxmatch (s1, s2)) // => 11
 
const s3 = 'foo, bar, baz';
const s4 = 'qux, foo, quux' 
 
console.log(maxmatch (s3, s4))  // => 5
А что больше, что меньше сам решай.

Добавлено через 18 минут
Так оптимальнее будет
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const s1 = 'adfsd test string';
const s2 = 'test string3121' 
 
const maxmatch = (s1, s2) => {
    let lmatch = 0;
    const l1 = s1.length;
    const l2 = s2.length;
    for (let b =0; b< l1; b++) {
        for ( let e = b+1; e<=l1; e++) {
            const s1s = s1.slice(b,e);
 
            if (s2.includes(s1s)) {
                const ls = e-b;
                if (lmatch < ls) {
                    lmatch = ls;
                }
            } else {
                break;
           }
        }
    }
    return lmatch;
}
 
console.log(maxmatch (s1, s2))
 
const s3 = 'foo, bar, baz';
const s4 = 'qux, foo, quux' 
 
console.log(maxmatch (s3, s4))
4
176 / 74 / 27
Регистрация: 10.11.2023
Сообщений: 199
27.03.2024, 11:04
Цитата Сообщение от nekit270 Посмотреть сообщение
совпадает большая часть строки
совпадает меньшая часть строки
какой строки ? )

Добавлено через 1 минуту
Цитата Сообщение от nekit270 Посмотреть сообщение
совпадает ли большая часть у двух строк.
всё таки большая часть двух строк ?
0
bat-пропагандист
 Аватар для nekit270
981 / 183 / 76
Регистрация: 07.12.2022
Сообщений: 454
Записей в блоге: 12
27.03.2024, 23:57  [ТС]
Цитата Сообщение от ZeroKara Посмотреть сообщение
всё таки большая часть двух строк ?
хорошо, переформулирую.
Функция должна вернуть true, если длина одинаковой части каждой строки больше длины оставшейся части.

"adfsd test string" и "test string3121"
В первой строке test string длиннее, чем остаток - adfsd
Во второй строке test string длинее, чем остаток - 3121
Следовательно, возвращаем true

"foo, bar, baz" и "qux, foo, quux"
В первой строке foo короче, чем остаток - , bar, baz
Во второй строке foo короче, чем остаток - qux, , quux
Следовательно, возвращаем false
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
28.03.2024, 01:52
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function maxmatch(str1, str2) {
    let maxMatch = "";
    for (let i = 0; i < str1.length; i++) {
        for (let j = str1.length; j > i + maxMatch.length; j--) {
            if (str2.includes(str1.substring(i, j)) && j - i > maxMatch.length) {
                maxMatch = str1.substring(i, j);
            }
        }
    }
    return maxMatch;
}
0
 Аватар для voraa
1289 / 1267 / 187
Регистрация: 21.01.2024
Сообщений: 5,834
28.03.2024, 06:21
Цитата Сообщение от nekit270 Посмотреть сообщение
"adfsd test string" и "test string3121"
В первой строке test string длиннее, чем остаток - adfsd
Во второй строке test string длинее, чем остаток - 3121
Следовательно, возвращаем true
А для строк
"adfsd test string" и "test string3121 foo, bar, baz qux, foo, quux" что возвращать?
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
28.03.2024, 12:28
Цитата Сообщение от voraa Посмотреть сообщение
А для строк
Ну если длина одинаковой строки, то логично что "test string"
0
 Аватар для voraa
1289 / 1267 / 187
Регистрация: 21.01.2024
Сообщений: 5,834
28.03.2024, 12:31
Цитата Сообщение от Именч Посмотреть сообщение
то логично что "test string"
Совсем не логично. Ему нужно true или false
Цитата Сообщение от nekit270 Посмотреть сообщение
"adfsd test string" и "test string3121"
В первой строке test string длиннее, чем остаток - adfsd
Во второй строке test string длинее, чем остаток - 3121
Следовательно, возвращаем true
"foo, bar, baz" и "qux, foo, quux"
В первой строке foo короче, чем остаток - , bar, baz
Во второй строке foo короче, чем остаток - qux, , quux
Следовательно, возвращаем false
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
28.03.2024, 12:35
Цитата Сообщение от voraa Посмотреть сообщение
Совсем не логично. Ему нужно true или false
Ну там уже начинается проверки длины строк. Т.е из длины надо длину похожих строк убрать и сверить
0
 Аватар для voraa
1289 / 1267 / 187
Регистрация: 21.01.2024
Сообщений: 5,834
28.03.2024, 12:39
Цитата Сообщение от Именч Посмотреть сообщение
Т.е из длины надо длину похожих строк убрать и сверить
В том то и проблема.
Что возвращать, если для первой строки остаток меньше подстроки, а для второй строки остаток больше подстроки?
Именно это я хочу и понять.
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
28.03.2024, 12:44
Вот так. Это ответ от GPT

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
function findAndRemoveSimilar(str1, str2) {
    let similar = "";
    for (let i = 0; i < str1.length; i++) {
        if (str2.includes(str1[i])) {
            similar += str1[i];
            str2 = str2.replace(str1[i], '');
        }
    }
    return str1.length - similar.length > str2.length;
}
 
console.log(findAndRemoveSimilar("adfsd test string", "test string3121"));
console.log(findAndRemoveSimilar("foo, bar, baz", "qux, foo, quux"));
1
bat-пропагандист
 Аватар для nekit270
981 / 183 / 76
Регистрация: 07.12.2022
Сообщений: 454
Записей в блоге: 12
28.03.2024, 12:49  [ТС]
voraa, в этом случае false. true должен быть только тогда, когда одинаковая часть длиннее и там, и там

Добавлено через 4 минуты
Именч, спасибо, работает
0
 Аватар для voraa
1289 / 1267 / 187
Регистрация: 21.01.2024
Сообщений: 5,834
28.03.2024, 13:23
Цитата Сообщение от Именч Посмотреть сообщение
Вот так. Это ответ от GPT
Полный бред
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
function findAndRemoveSimilar(str1, str2) {
    let similar = "";
    for (let i = 0; i < str1.length; i++) {
        if (str2.includes(str1[i])) {
            similar += str1[i];
            str2 = str2.replace(str1[i], '');
        }
    }
    return str1.length - similar.length > str2.length;
}
 
console.log(findAndRemoveSimilar("abcdefg", "abcdefg")); // => false
console.log(findAndRemoveSimilar("abcdefg123", "gfedcba")); // => true
Добавлено через 10 минут
Программеры скоро будут не нужны.
Нужны будут формулировщики вопросов к GPT
И тестировщики его ответов.

Но время это будет занимать больше.
0
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
28.03.2024, 13:28
Цитата Сообщение от nekit270 Посмотреть сообщение
"adfsd test string" и "test string3121"
В первой строке test string длиннее, чем остаток - adfsd
Во второй строке test string длинее, чем остаток - 3121
Следовательно, возвращаем true
"foo, bar, baz" и "qux, foo, quux"
В первой строке foo короче, чем остаток - , bar, baz
Во второй строке foo короче, чем остаток - qux, , quux
Следовательно, возвращаем false
Как он написал, я так боту и вставил. По ТЗ. Одинаковые строки должны быть вырезаны. И должна быть проверка оставшийся длины.
", bar, baz" (10 символов) > "qux, , quux" (11 символов) = false

Про пустые строки, и строки с одинаковой длиной. Речи не было. По этому БОТ и не учёл этот момент, если нужно возвращать true.

Но true возвращать не нужно. Так как первая строка не больше второй.

Добавлено через 1 минуту
Цитата Сообщение от voraa Посмотреть сообщение
И тестировщики его ответов.
Скрипт из ТЗ работает корректно. Мы это видим во втором твоём примере. efg123 больше чем cba следовательно true

Добавлено через 1 минуту
Ну собств ты просто прикопался за счёт непонятного ТЗ.
0
 Аватар для voraa
1289 / 1267 / 187
Регистрация: 21.01.2024
Сообщений: 5,834
28.03.2024, 13:30
Цитата Сообщение от nekit270 Посмотреть сообщение
Требуется определить, совпадает ли большая часть у двух строк.

Например:
"adfsd test string" и "test string3121" - true (совпадает большая часть строки)
"foo, bar, baz" и "qux, foo, quux" - false (совпадает меньшая часть строки)
Цитата Сообщение от voraa Посмотреть сообщение
console.log(findAndRemoveSimilar("abcdef g123", "gfedcba")); // => true
Объясни на этом примере
Там в примере даже было подчеркнуто, что совпадает. И как можно понять имеются в виду не совпадающие символы, а самые длинные одинаковые подстроки.
0
bat-пропагандист
 Аватар для nekit270
981 / 183 / 76
Регистрация: 07.12.2022
Сообщений: 454
Записей в блоге: 12
28.03.2024, 13:33  [ТС]
Именч, поправка - не работает в таких случаях:
JavaScript
1
2
3
4
> findAndRemoveSimilar('teststring 123', 'teststring 124')
< false
> findAndRemoveSimilar('123 teststring', 'teststring 124')
< false
В обоих случаях должен быть true.
0
 Аватар для voraa
1289 / 1267 / 187
Регистрация: 21.01.2024
Сообщений: 5,834
28.03.2024, 13:33
Цитата Сообщение от voraa Посмотреть сообщение
console.log(findAndRemoveSimilar("abcdef g", "abcdefg")); // => false
И как объяснить это по любому ТЗ
0
bat-пропагандист
 Аватар для nekit270
981 / 183 / 76
Регистрация: 07.12.2022
Сообщений: 454
Записей в блоге: 12
28.03.2024, 13:34  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
И как можно понять имеются в виду не совпадающие символы, а самые длинные одинаковые подстроки.
именно
0
 Аватар для voraa
1289 / 1267 / 187
Регистрация: 21.01.2024
Сообщений: 5,834
28.03.2024, 13:42
Лучший ответ Сообщение было отмечено nekit270 как решение

Решение

Я же во втором посте давал код. Его же просто слегка изменить надо было, что бы выдавал не длину подстроки, а true или false/
Неужто это так безумно трудно было сделать.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
const s1 = 'adfsd test string';
const s2 = 'test string3121' 
 
const maxmatch = (s1, s2) => {
    let lmatch = 0;
    const l1 = s1.length;
    const l2 = s2.length;
    for (let b =0; b< l1; b++) {
        for ( let e = b+1; e<=l1; e++) {
            const s1s = s1.slice(b,e);
 
            if (s2.includes(s1s)) {
                const ls = e-b;
                if (lmatch < ls) {
                    lmatch = ls;
                }
            } else {
                break;
           }
        }
    }
    return lmatch > l1/2 && lmatch > l2/2;
}
 
console.log(maxmatch (s1, s2)) // => true
 
const s3 = 'foo, bar, baz';
const s4 = 'qux, foo, quux' 
 
console.log(maxmatch (s3, s4))  // => false
console.log(maxmatch ('teststring 123', 'teststring 124'))  // => true
console.log(maxmatch ('123 teststring', 'teststring 124'))  // => true
1
168 / 146 / 32
Регистрация: 03.09.2018
Сообщений: 499
28.03.2024, 13:43
Цитата Сообщение от nekit270 Посмотреть сообщение
В обоих случаях должен быть true.
Ага. Надо учесть что цифры не буквы. А он удаляет teststring 12
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2024, 13:43
Помогаю со студенческими работами здесь

Найти самую длинную общую часть двух заданных строк
Заданы две строки. Найти самую длинную их общую часть.

Одинакова ли совершаемая данной силой работа в двух инерциальных системах отсчета?
Насколько я понял, одинакова. Только вот преподаватель требует объяснения, как пояснить? Заранее благодарен.

Вылетает большая часть игр
В декабре 2015 года купил себе компьютер и столкнулся с проблемами. Вылетают практически все игры: Diablo 3, X COM 2, WoW: Draenor. Не...

Не грузится большая часть сайтов
Не работает большая часть сайтов. Оператор Мтс уверяет что это проблема не с его стороны, предлагает проверить на вирусы. Проверка курейтом...

Большая часть игр не запускается
Здравствуйте. У меня проблема с запуском игр. Проблеме этой уже год/полтора. В один прекрасный день большая часть игр перестали...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru