Итак, я работаю над рекурсивным методом чистого, который извлекает подстроение во внешних скобках строки, без самих скобок.
Метод работает, как и ожидалось, но опускает закрытие скобок) в таких случаях », как« 123 (45)) ", где я хочу, чтобы результат был" 45) ". сами скобки. Если нет допустимой пары скобок, метод должен вернуть пустую строку. < /P>
Ограничения: < /p>
[*] Никакие петли не могут быть использованы, только рекурсия. < /p>
< /li>
Вы можете использовать только следующие методы строки: charat, equals, длина, подстроение и isempty.
[*] Входная строка гарантированно будет не-null.
< /ul>
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
Программисты JAVA общаются здесь
1738103711
Anonymous
Итак, я работаю над рекурсивным методом чистого, который извлекает подстроение во внешних скобках строки, без самих скобок.
Метод работает, как и ожидалось, но опускает закрытие скобок) в таких случаях », как« 123 (45)) ", где я хочу, чтобы результат был" 45) ". сами скобки. Если нет допустимой пары скобок, метод должен вернуть пустую строку. < /P>
Ограничения: < /p>
[*] Никакие петли не могут быть использованы, только рекурсия. < /p>
< /li>
Вы можете использовать только следующие методы строки: charat, equals, длина, подстроение и isempty.
[*] Входная строка гарантированно будет не-null.
< /ul>
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))"?
Любая помощь ценится!
Подробнее здесь: [url]https://stackoverflow.com/questions/79395252/issue-with-recursive-method-to-extract-substring-between-outer-parentheses[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия