我如何将给定的括号字符串中的字符值转换为整数,具体取决于它们的顺序是否正确?
任务是将给定的括号字符串示例:“(())”设置为数字 0,1 和 -1。
数字 0 将是“(”的整数,如果给定的括号“(”在给定的字符串中有它的对“)”。
如果给定的括号“)”有它的对“(”,则数字 1 将是“)”的整数" 在给定的字符串中。
如果 "(" 或 ")" 没有一对,或者准确地说,如果它们在给定的字符串中没有关闭,则数字 -1 将是一个整数,
例如:
1.Input: 2.Input: 3.Input ?
(() ()) ((())(()))))
Output: Output: Output:
-101 01-1 0001100111-1-1
我曾尝试使用堆栈来检查括号的顺序是否正确,但我无法根据条件为它们设置值。
String parens="(())";
Stack<Character> s = new Stack<>();
char c;
for(int i=0;i<parens.length();i++) {
c=parens.charAt(i);
if(c=='(')
s.push(c);
else if(c==')') {
if(s.empty() || s.peek()!='(')
continue;
else
s.pop();
}
}
if(s.empty()) {
System.out.println("Correct");
}else {
System.out.println("Incorrect");
}
回答
虽然您的总体想法是正确的 - 需要对其进行调整以适应主要任务“将大括号转换为数字”。
让我们对解决任务进行下一个假设:
- 将使用按索引的结果字符串临时数组
- 将使用用于保存已打开(尚未关闭)大括号索引的堆栈
算法将是下一个:
- 使用下一个规则迭代给定的字符串:
- 如果堆栈为空且当前索引处的字符为 ')' - 当前索引为“-1”
- 如果堆栈为空且当前索引处的字符为 '(' - 将当前索引推入堆栈
- 如果堆栈不为空且当前索引处的字符为 ')' - 将当前索引的结果设置为“1” - 并在弹出索引的设置结果处从堆栈中弹出元素(匹配的大括号索引)为“0”
- 如果堆栈不为空且当前索引处的字符为 '(' - 将当前索引推入堆栈
- 迭代字符串后 - 对于堆栈中的每个元素 - 结果应该是“-1”
- 将所有结果合并为 1 个字符串
代码:
private static String convert(String input) {
String[] result = new String[input.length()];
Stack<Integer> openPositions = new Stack<>();
for (int i = 0; i < input.length(); i++) {
char currentChar = input.charAt(i);
if (openPositions.isEmpty()) {
if (currentChar == ')') {
result[i] = "-1";
} else {
openPositions.push(i);
}
} else {
if (currentChar == ')') {
result[i] = "1";
result[openPositions.pop()] = "0";
} else {
openPositions.push(i);
}
}
}
openPositions.forEach(index -> result[index] = "-1");
return String.join("", result);
}
THE END
二维码