Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将给定参数字符串中的字符值转换为整数,取决于它们的顺序是否正确?_Java_Stack - Fatal编程技术网

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

Java 如何将给定参数字符串中的字符值转换为整数,取决于它们的顺序是否正确?,java,stack,Java,Stack,任务是将给定的parens字符串例如:(())设置为数字0、1和-1 数字0将是给定字符串中“(“如果给定参数”(“有它的对”)的整数。 数字1将是“)”的整数,如果给定的paren“)有它的pair”(“在给定的字符串中。 如果它们都没有对,则数字-1将是“(”或“)”的整数;准确地说,如果它们在给定字符串中没有闭合,则数字-1将是“(”或“)”的整数。 例如: 1.Input: 2.Input: 3.Input ​ (() ())

任务是将给定的parens字符串例如:(())设置为数字0、1和-1

数字0将是给定字符串中“(“如果给定参数”(“有它的对”)的整数。
数字1将是“)”的整数,如果给定的paren“)有它的pair”(“在给定的字符串中。
如果它们都没有对,则数字-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");
        }
String parens=“(())”;
堆栈s=新堆栈();
字符c;

对于(inti=0;i,虽然您的总体想法是正确的,但它需要调整以适应主要任务“将大括号转换为数字”

让我们做下一个解决任务的假设:

  • 将使用索引结果字符串的临时数组
  • 将使用用于保存已打开(尚未关闭)大括号索引的堆栈
算法将是下一步:

  • 使用下一个规则迭代给定字符串:
    • 若堆栈为空且当前索引处的字符为“')-“-1”,则表示当前索引
    • 若堆栈为空且当前索引处的字符为“(”,则将当前索引推入堆栈
    • 如果堆栈不为空,且当前索引处的字符为“')”-则将当前索引的结果设置为“1”-并将堆栈中的pop元素(匹配的大括号索引)设置为poped索引的结果“0”
    • 若堆栈不为空且当前索引处的字符为“(”,则将当前索引推入堆栈
  • 迭代字符串后-对于堆栈中的每个元素-结果应为“-1”
  • 将所有结果合并为一个字符串
  • 代码:

    私有静态字符串转换(字符串输入){
    字符串[]结果=新字符串[input.length()];
    堆栈打开位置=新堆栈();
    对于(int i=0;i结果[索引]=“-1”);
    返回字符串。join(“,result);
    }
    
    虽然您的总体想法是正确的,但需要对其进行调整,以适应主要任务“将大括号转换为数字”

    让我们做下一个解决任务的假设:

    • 将使用索引结果字符串的临时数组
    • 将使用用于保存已打开(尚未关闭)大括号索引的堆栈
    算法将是下一步:

  • 使用下一个规则迭代给定字符串:
    • 若堆栈为空且当前索引处的字符为“')-“-1”,则表示当前索引
    • 若堆栈为空且当前索引处的字符为“(”,则将当前索引推入堆栈
    • 如果堆栈不为空,且当前索引处的字符为“')”-则将当前索引的结果设置为“1”-并将堆栈中的pop元素(匹配的大括号索引)设置为poped索引的结果“0”
    • 若堆栈不为空且当前索引处的字符为“(”,则将当前索引推入堆栈
  • 迭代字符串后-对于堆栈中的每个元素-结果应为“-1”
  • 将所有结果合并为一个字符串
  • 代码:

    私有静态字符串转换(字符串输入){
    字符串[]结果=新字符串[input.length()];
    堆栈打开位置=新堆栈();
    对于(int i=0;i结果[索引]=“-1”);
    返回字符串。join(“,result);
    }
    
    这很难,因为您不知道前导的
    是否匹配,这取决于字符串后面的匹配项。您需要跟踪这些字符在“数字”中的位置然后返回并根据最后的结果进行调整。我也很好奇大括号是否可以匹配括号,或者这两个括号是否需要单独跟踪。如果是后者,则会增加更多的复杂性。@markspace我认为大括号是一个错误。示例仅显示了括号。我将修复该错误。谢谢您指出:)这很难,因为您不知道前导的
    是否有匹配项,这取决于字符串后面的匹配项。您需要跟踪这些字符在“数字”中的位置然后返回并根据最后的结果进行调整。我也很好奇大括号是否可以匹配括号,或者这两个括号是否需要单独跟踪。如果是后者,则会增加更多的复杂性。@markspace我认为大括号是一个错误。示例仅显示了括号。我将修复该错误。谢谢您指出:)我相信你打错了<代码>结果[openPositions.pop()]=“1”应该是
    结果[openPositions.pop()]=“0”更新,谢谢@wjs非常感谢,它确实有效,是我想法的一个很好的补充!:我相信你打错了<代码>结果[openPositions.pop()]=“1”应该是
    结果[openPositions.pop()]=“0”更新,谢谢@wjs非常感谢,它确实有效,是我想法的一个很好的补充!:D
    
    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);
    }