Итак, я работаю над рекурсивным методом чистого, который извлекает подстроение во внешних скобках строки, без самих скобок.
Метод работает, как и ожидалось, но опускает закрытие скобок) в таких случаях », как« 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
Проблема с рекурсивным методом для извлечения подстроения между внешними скобками ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Проблема с рекурсивным методом для извлечения подстроения между внешними скобками
Anonymous » » в форуме JAVA - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Проблема с рекурсивным методом для извлечения подстроения между внешними скобками
Anonymous » » в форуме JAVA - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Проблема с рекурсивным методом для извлечения подстроения между внешними скобками
Anonymous » » в форуме JAVA - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Проблема с рекурсивным методом для извлечения подстроения между внешними скобками
Anonymous » » в форуме JAVA - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-