如何将给定的父字符串中的字符值转换为整数,取决于它们的顺序是否正确



任务是设置给定的parens字符串,例如:"((((";到数字0,1和-1。

数字0将是"0"的整数;("如果给定的paren"("有它的对"(;在给定的字符串中
数字1将是"的整数"如果给定的paren"("有一双";(给定字符串中的"。
数字-1将是"("或"("的整数;如果它们都没有一对,或者准确地说,如果它们在给定的String中不闭合
例如:

1.Input:      2.Input:      3.Input    ​
(()           ())           ((())(()))))
Output:       Output:       Output:
-101          01-1          0001100111-1-1

我曾尝试使用堆栈来检查parens的顺序是否正确,但我无法根据条件设置它们的值。

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〃;对于当前索引
    • 如果堆栈为空,并且当前索引处的字符为"("-将当前索引推入堆栈
    • 如果堆栈不为空并且当前索引处的字符为"(",则将当前索引的结果设置为";1〃-以及在弹出索引的设置结果处从堆栈中弹出元素(匹配的大括号索引(作为"匹配";0">
    • 如果堆栈不为空,并且当前索引处的字符为"("-将当前索引推入堆栈
    1. 在字符串上迭代后-对于堆栈中的每个元素-结果应该是"-1〃
    2. 将所有结果组合成一个字符串

    代码:

    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);
    }
    

    相关内容

    最新更新