m700
m700
если словарь лишних символов не пуст, то пропускаем
Igor
Так мы двигаем всегда, я не понял что значит если лишние есть то двигать
lvt
лишние буквы(?)
Igor
Аа ты хочешь два указателя бегать
m700
Igor
Я бы шел одной длинной наверное, но можно и так
m700
слева вычеркивает справа заполняет, притом если он не из анограмы, приходит то двигаем дальше окно
m700
только когда символы теже что в словаре сопоставляем ко-во
Igor
только когда символы теже что в словаре сопоставляем ко-во
смотри твое ускорение про не из анаграммы оно не ассимптотическое. т.е теоретически все символы в анаграмме и не в анаграмме могут быть одинаковые вопрос только в кол-ве. Обычно такие улучшения не особо влияют на худший случай. А оптимизируют в первую очередь худшие случаи
m700
Igor
Т.е да такую проверку делать можно. Но обычно это усложняет код а понимания задачи не прибавляет.
Igor
ок, понял
Но идея правильная я бы пробовал писать ;)
Andrii
Ну по технике join можно нафик выкинуть, а сравнивать списки
Andrii
Wietcewitch
Здравствуйте
Сделал калькулятор, но возникло две проблемы и не могу понять как их решить.
1)Хочу чтобы он работал только с двумя числами, но если вбить 1 + 2 + 3, то он выдаст ответ 3(1 + 2), а я хочу чтобы throw new Exception("Неверное значение")
2) При рандомном тексте( hasdada) мой калькулятор пытается этот текст поймать в первый аргумент, у него это не выходит и он выдает Index 2 out of bounds for length 1, а я хочу чтобы throw exception был.
Код тут https://pastebin.com/9KTD2umB
Как это технически сделать?
lvt
lvt
хотя там вроде O(n*m) получается где m длина p
lvt
или ошибаюсь?..
m700
Igor
а как ты хэшем перестановки будешь делать?
Igor
хэши обычно если последовательность нужно проверять
Igor
если ты будешь каждый раз рехешировать ... то это О(len(p))
Igor
тогда да получишь m*n
Igor
а ну и сортировать ...
Igor
там как бы len(p) в квадрате не оказалась
Igor
т.е получим н куб решение
Wietcewitch
lvt
еще одно решение, лучше чем прошлое, но все еще полная пизда хд
Шурок
Wietcewitch
! + 3
Спасибо, но это сильно усложнило задачу
Хочу сделать, чтобы был throw, если длинна строки была больше 5 включительно и меньше 3 включительно
А вот с этим вариантом не знаю что сделать
Wietcewitch
! + 3
А стоп, а если просто else добавить в конце с throw
Типа
if
if
if
if
else всё остальное и throw
Шурок
Wietcewitch
depre??ed
Приветствую, как можно правильно аннотировать эту часть кода? по Python 3.9
Wietcewitch
Но сейчас подумаю ещё
Andrii
chars = set(s)
d = dict(zip(chars, [0] * len(chars)))
dp = d.copy()
for ch in p:
dp[ch] += 1
ds = d.copy()
for i in range(len(p)):
ds[s[i]] += 1
for i, j in enumerate(range(len(p), len(s)+1)):
if ds == dp:
print('found!')
ds[s[i]] -= 1
ds[s[j]] += 1
Что-то типа такого на глазок
Igor
Не успел свет вырубили, я вроде написал код но на лиит чекнушть не успел( ... Чуть позже вброшу
Andrii
Я не чекал, просто идея
Azamat
Igor
Igor
У мну шо то типа на компе инета нет) тож проверить не могу)
Wietcewitch
Igor
class Solution:
def findAnagrams(self, s: str, p: str) -> List[int]:
lp = len(p)
res = []
pd = Counter(p)
sd = Counter()
incorrect = lp
def add(c):
nonlocal incorrect
incorrect -= abs(pd[c] - sd[c])
sd.update((c))
incorrect += abs(pd[c] - sd[c])
def sub(c):
nonlocal incorrect
incorrect -= abs(pd[c] - sd[c])
sd.subtract((c))
incorrect += abs(pd[c] - sd[c])
for c in s[:lp]:
add(c)
if not incorrect:
res.append(0)
for i in range(1, len(s)-lp+1):
sub(s[i-1])
add(s[i+lp-1])
if not incorrect:
res.append(i)
return res
309 мс ... по хорошему каунтер нужно менять на массив и функции инлайнить ... но заниматься я этим не буду ;) идея именно такая ... не чекать весь словарь. можно даже коррект инкоррект без пересчетов сделать ... но влом
lvt
жесть...
Igor
ну избавься от адд и сабстракт ... дергай их инлайн ... просто мне так было удобней
Wietcewitch
Как делать проверку на вбив рандомного текст в калькуляторе? По типу "adsasd"
По количеству символов не выходит
Maksim Pozharskiy
Igor
Igor
\d+\s*[+-*/]\s*\d+ что то типа ... не силен в них ...
Maksim Pozharskiy
Генераторов регулярок много в интернете, но тебе нужна одна из распространенных
Igor
\d+\s*[+\-*\/]\s*\d+
утак
Igor
в джаве не сарю сорян. пусть джависты скажут ;)
Евгений
Ребят,помогите с рандомом
Нужно сделать прогу,которая бы рандомно ставила +, -, *, /
Как это осуществить в питоне?
Igor
А как это в код впихнуть?
чат гпт говорит шо то типа
String str = "1233 + 12332";
String pattern = "\d+\s*[+\-*\/]\s*\d+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
if (m.matches()) {
ну и
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Igor
Евгений
Это ведь в качестве строки только?
А в качестве операции реально?
Wietcewitch
Igor
Igor
choices = [
lambda a, b: a + b,
lambda a, b: a - b,
lambda a, b: a * b,
lambda a, b: a / b
]
random.choice(choices)(10, 5)
так?)
import operator
import random
a = 10
b = 2
o = random.choice([operator.add, operator.sub, operator.mul, operator.truediv])
print(o(a, b))
ну или через лямбды да
Igor
К сожалению не сработало
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyClass {
public static void main(String args[]) {
String str = "1233 12332";
String pattern = "\\d+\\s*[+\\-*/]\\s*\\d+";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
if (m.matches()) {
System.out.println("correct");
} else {
System.out.println("incorrect");
}
}
}
Igor
там с экранированием забубоны
Wietcewitch
Это какой-то сложный вариант
Wietcewitch
Я уверен есть проще
Igor
🤷♀️
Igor
если человек знает регекспы то в нем нет ничего сложного. Думаю чтобы проверить все те случаи что проверяет регексп тебе прийдется написать тонну кода.