Sobes.tech
Назад к вопросам
Intern
5

/** :-))) :-(( "ab :-)" = "ab " "ab :-)))" = "ab " "ab :-)))(" = "ab (" "ab ):-)" = "ab )" ":-)" = "" **/ func deleteP(str string) string { n := len(str) res := make([]byte, 0, n) i := 0 for i < n { if str[i] == ':' && str[i+1] == '-' && (str[i+2] == ')' || str[i+2] == '(') { ch := str[i+2] i += 2 for i < n && str[i] == ch { i++ } } else { res = append(res, str[i]) } } return string(res) }

Компании, где спрашивали
Яндекс

Ответ от нейросети

sobes.tech AI

Функция deleteP на Go удаляет из строки все вхождения смайликов в формате ":-)))" или ":-((" с любым количеством повторяющихся скобок ")" или "(" после ":-".

Алгоритм:

  • Идём по строке посимвольно.
  • Если встречаем последовательность ":-" и далее идут одинаковые скобки ")" или "(", то пропускаем их все.
  • Иначе добавляем символ в результат.

Пример работы:

func deleteP(str string) string {
    n := len(str)
    res := make([]byte, 0, n)
    i := 0
    for i < n {
        if i+2 < n && str[i] == ':' && str[i+1] == '-' && (str[i+2] == ')' || str[i+2] == '(') {
            ch := str[i+2]
            i += 3
            for i < n && str[i] == ch {
                i++
            }
        } else {
            res = append(res, str[i])
            i++
        }
    }
    return string(res)
}

Например:

  • "ab :-)" -> "ab "
  • "ab :-)))" -> "ab "
  • "ab :-)))(" -> "ab ("
  • "ab ):-)" -> "ab )"
  • ":-)" -> ""