Проблема с рекурсивным методом для извлечения подстроения между внешними скобкамиJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с рекурсивным методом для извлечения подстроения между внешними скобками

Сообщение Anonymous »

Итак, я работаю над рекурсивным методом чистого, который извлекает подстроение во внешних скобках строки, без самих скобок.
Метод работает, как и ожидалось, но опускает закрытие скобок) в таких случаях », как« 123 (45)) ", где я хочу, чтобы результат был" 45) ". сами скобки. Если нет допустимой пары скобок, метод должен вернуть пустую строку. < /P>
Ограничения: < /p>

[*] Никакие петли не могут быть использованы, только рекурсия. < /p>
< /li>
Вы можете использовать только следующие методы строки: charat, equals, длина, подстроение и isempty.

[*] Входная строка гарантированно будет не-null.
< /ul>
public class Main {
public static void main(String[] args) {
String seq = "1(234)67";

System.out.println(clean(seq)); // Expected output: "234"
System.out.println(clean("123(45))")); // Expected output: "45)"
System.out.println(clean("x)")); // Expected output: ""
System.out.println(clean(")x(")); // Expected output: ""
}

public static String clean(String seq) {
if (seq.isEmpty()) {
return "";
}

// If the first character is not '(', remove all characters before it
if (seq.charAt(0) != '(') {
return clean(seq.substring(1));
}

int depth = 0;
int startIdx = -1;
int endIdx = -1;

// Recursively traverse the string to find the outer parentheses
for (int i = 0; i < seq.length(); i++) {
char ch = seq.charAt(i);

if (ch == '(') {
if (depth == 0) {
startIdx = i; // Mark the start of the outer parenthesis
}
depth++;
} else if (ch == ')') {
depth--;
if (depth == 0) {
endIdx = i; // Mark the end of the outer parenthesis
break;
}
}
}

// If an outer parenthesis is found, return the substring without the parentheses
if (startIdx != -1 && endIdx != -1) {
return seq.substring(startIdx + 1, endIdx); // Return the content inside the parentheses
}

// Return an empty string if no valid parentheses are found
return "";
}
}
< /code>
текущий вывод: < /p>
clean("1(234)67") -> "234"
clean("123(45))") -> "45"
clean("x)") -> ""
clean(")x(") -> ""
< /code>
ожидаемый вывод: < /p>
clean("1(234)67") -> "234"
clean("123(45))") -> "45)"
clean("x)") -> ""
clean(")x(") -> ""
< /code>
Функция работает, как и ожидалось, когда строка имеет допустимые скобки, но для строки «123 (45))» мне нужно, чтобы вывод был «45)» (включая закрытие скобки )). Тем не менее, текущая реализация возвращает «45» без закрывающего скобку. в самой внешней паре. Метод все еще должен включать закрытие скобки, когда он является частью самой внешней пары скобков. "123 (45))"?
Любая помощь ценится!

Подробнее здесь: https://stackoverflow.com/questions/793 ... arentheses
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»