2016-10-29 2 views
0

Мне был дан TreeNode в виде строки и нужно выполнить проверку в строке, чтобы убедиться, что она действительно правильная, перед выполнением каких-либо операций над ней. Моя программа отлично работает в представлении дерева, и я выбрал другие исключения, такие как двойные запятые и т. Д., Но некоторые исключения из недействительных деревьев дают мне трудное время.Java Node String Validation

Тест 1:

"(,1)2" 

Легко проверить с:

str.contains"(," 

Тест 2:

"(1)2,(3)4" 

?

Тест 3:

"(1,2)3,4" 

?

Последние 2 теста дают мне головную боль по поводу приближения к ним. Я попробовал использовать stringbuilder для проверки без чисел, но проблема в том, что есть правильные деревья, которые используют одни и те же скобки и комбо-комбо (например, «), (« который является корнем в дереве + (+ (+ (1, 2), 3), + (4,5)) ...)

Можно ли как-то проверить их перед выполнением операции, как и другие, или мне нужно сделать это где-то внутри, итерации узлов?

PS: Они должны быть всесторонними, что означает, что цифры могут быть любыми. Поэтому я не могу просто вставить всю строку и обмануть

ответ

0

Можете ли вы использовать выражения регулярных выражений?

Тест 2:

Pattern pattern = Pattern.compile("\([0-9]\)[0-9],\([0-9]\)[0-9]"); 
Matcher matcher = pattern.matcher(s); 
boolean found = matcher.find(); 

Тест 3:

Pattern pattern = Pattern.compile("\([0-9],[0-9]\)[0-9],[0-9]"); 
Matcher matcher = pattern.matcher(s); 
boolean found = matcher.find(); 
+0

я могу, но это все-таки своего рода специфичные для одной определенной сборки узла, проблема как в строке является размещение запятой и я думаю, что они просят решение для всех (например, две запятые могут быть где угодно в любой строке), поэтому это дает мне головную боль. –

+0

Вам нужно будет перебирать строку и обрабатывать каждый символ самостоятельно. Существует не простое решение для куки-резаков, вам нужно будет разработать алгоритм для этого. Ожидайте написать несколько методов, возможно, некоторые рекурсивные методы, чтобы найти правильное решение. Stackoverflow здесь не для того, чтобы делать домашнее задание, поэтому лучше всего разработать алгоритм, используя предпочтительный метод (бумага и ручка, псевдокод, взломать его). Получите помощь от сокурсников! – ChickenFeet