Java 在字符串中查找对应的元素
请参阅以下内容: 括号被视为以下任一字符:(, ),{,},[或] 如果有开口,则两个支架被视为匹配对 括号(即,(,[,或{)出现在结束括号的左边 (即,),]或})完全相同的类型。有三种类型的 匹配的括号对:[]、{}和() 如果一组括号不平衡,则匹配的括号对不平衡 所包含的内容不匹配。例如,{[(])}是不平衡的,因为 {和}之间的内容不平衡。一对正方形 括号中包含一个不平衡的开口括号,(,和 一对圆括号括住一个不平衡的闭合正方形 括号,] 我已完成以下程序:Java 在字符串中查找对应的元素,java,Java,请参阅以下内容: 括号被视为以下任一字符:(, ),{,},[或] 如果有开口,则两个支架被视为匹配对 括号(即,(,[,或{)出现在结束括号的左边 (即,),]或})完全相同的类型。有三种类型的 匹配的括号对:[]、{}和() 如果一组括号不平衡,则匹配的括号对不平衡 所包含的内容不匹配。例如,{[(])}是不平衡的,因为 {和}之间的内容不平衡。一对正方形 括号中包含一个不平衡的开口括号,(,和 一对圆括号括住一个不平衡的闭合正方形 括号,] 我已完成以下程序: import java.io
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
public class Solution {
static char findCorrBracket(char b)
{
if(b == '{')
{
return '}';
}
else if(b == '[')
{
return ']';
}
else
{
return ')';
}
}
// Complete the isBalanced function below.
static String isBalanced(String s) {
char a[] = new char[1000];
int top = 0,i=1;
a[0]=s.charAt(0);
char retBrack;
String result;
while(top!=-1 )
{
retBrack=findCorrBracket(s.charAt(top));
if(s.charAt(i)!=retBrack)
{
a[top]=s.charAt(i);
top=i;
}
else
{
top--;
}
i++;
if(i>=s.length()-1)
{
break;
}
}
System.out.println(top);
if(top==0)
{
result = "YES";
}
else
{
result = "NO";
}
return result;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
int t = scanner.nextInt();
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
for (int tItr = 0; tItr < t; tItr++) {
String s = scanner.nextLine();
String result = isBalanced(s);
bufferedWriter.write(result);
bufferedWriter.newLine();
}
bufferedWriter.close();
scanner.close();
}
}
import java.io.*;
导入java.math.*;
导入java.security.*;
导入java.text.*;
导入java.util.*;
导入java.util.concurrent.*;
导入java.util.regex.*;
公共类解决方案{
静态字符findCorrBracket(字符b)
{
如果(b=='{')
{
返回“}”;
}
else如果(b=='[')
{
返回']';
}
其他的
{
返回“)”;
}
}
//完成下面的isBalanced功能。
静态字符串已平衡(字符串s){
字符a[]=新字符[1000];
int-top=0,i=1;
a[0]=s.charAt(0);
沙雷布拉克;
字符串结果;
while(顶部!=-1)
{
retBrack=FindCorr括号(s.charAt(顶部));
如果(s.charAt(i)!=retBrack)
{
a[top]=s.charAt(i);
top=i;
}
其他的
{
顶部--;
}
i++;
如果(i>=s.length()-1)
{
打破
}
}
系统输出打印项次(顶部);
如果(顶部==0)
{
结果=“是”;
}
其他的
{
结果=“否”;
}
返回结果;
}
专用静态最终扫描仪=新扫描仪(System.in);
公共静态void main(字符串[]args)引发IOException{
BufferedWriter BufferedWriter=new BufferedWriter(newfilewriter(System.getenv(“OUTPUT_PATH”));
int t=scanner.nextInt();
scanner.skip(“(\r\n |[\n\r\u2028\u2029\u0085])”;
对于(int-tItr=0;tItr
我对代码做了一点修改。它使程序更具可读性。但问题依然存在
/******************************************************************************
Online Java Debugger.
Code, Run and Debug Java program online.
Write your code in this editor and press "Debug" button to debug program.
*******************************************************************************/
public class Main
{
static char findCorrBracket(char b)
{
if(b == '{')
{
return '}';
}
else if(b == '[')
{
return ']';
}
else
{
return ')';
}
}
// Complete the isBalanced function below.
static String isBalanced(String s) {
char a[] = new char[1000];
int top = 0,i=1;
a[0]=s.charAt(0);
char retBrack;
String result;
while(i<s.length())
{
retBrack=findCorrBracket(s.charAt(top));
if(s.charAt(i)!=retBrack)
{
top++;
a[top]=s.charAt(i);
}
else
{
top--;
}
i++;
}
System.out.println(top);
if(top==-1)
{
result = "YES";
}
else
{
result = "NO";
}
return result;
}
public static void main(String[] args) {
String s="{[]()}";
String result = isBalanced(s);
System.out.println(result);
}
}
/******************************************************************************
在线Java调试器。
联机编写、运行和调试Java程序。
在此编辑器中编写代码,然后按“调试”按钮调试程序。
*******************************************************************************/
公共班机
{
静态字符findCorrBracket(字符b)
{
如果(b=='{')
{
返回“}”;
}
else如果(b=='[')
{
返回']';
}
其他的
{
返回“)”;
}
}
//完成下面的isBalanced功能。
静态字符串已平衡(字符串s){
字符a[]=新字符[1000];
int-top=0,i=1;
a[0]=s.charAt(0);
沙雷布拉克;
字符串结果;
而(i更新——我在代码中添加了作为注释的更正
static char findCorrBracket(char b)
{
if(b == '{')
{
return '}';
}
else if(b == '[')
{
return ']';
}
else if(b == '(')
{
//Use else if here instead of else, since otherwise '}',']','(' & ')' will all get the returned character value ')'
return ')';
} else {
return '_';
}
}
// Complete the isBalanced function below.
static String isBalanced(String s) {
char a[] = new char[1000];
int top = 0,i=1;
a[0]=s.charAt(0);
char retBrack;
String result;
while(i<s.length())
{
if(top == -1) {
//If the stack is empty, then we don't need to get the 'correct bracket' and check
//We can directly insert the character into the stack
top++;
a[top] = s.charAt(i);
} else {
//findCorrBracket from `a[top]`, not from `s.charAt(top)`
retBrack = findCorrBracket(a[top]);
if (s.charAt(i) != retBrack) {
top++;
a[top] = s.charAt(i);
} else {
top--;
}
}
i++;
}
System.out.println(top);
if(top==-1)
{
result = "YES";
}
else
{
result = "NO";
}
return result;
}
另外,我可以提出一些改进建议
正如racraman所建议的,在循环中使用而不是while
,除非您需要do while
不要创建用作堆栈的静态数组,请使用Java集合(例如,ArrayList
)创建动态堆栈。这样,即使字符串具有超过1000个连续的(
),您的代码也可以工作
您已经走上了正确的道路,使用堆栈并一次迭代字符串一个字符。但是您对每个字符的逻辑似乎没有任何意义。显然,如果输入字符串满足一些非常特定的条件,它“工作”,但一般不工作。类似的东西(在伪代码中)将在任何输入上工作:
top=i;
应该是top++;
。此外,我强烈建议将而替换为for(int i=1;i=0;i++)
它不起作用,先生。实际上,我的代码的问题是,我编写代码时考虑了以下情况:“{([])}”、“{[()}”而不是“{([])[])”[]}[]”就叫我Jem,我会再看一次代码,我可能遗漏了什么。检查top==-1
,而不是top==0
。你好,Jem,你介意检查我更新的代码吗。我觉得变量top的增量和减量有问题。我刚刚重新检查了。findCorrBracket(char b)函数也需要更改。现在它工作正常。谢谢。你好凯文。你好!你介意检查我更新的代码吗。我觉得变量top的增量和减量有问题。
// Complete the isBalanced function below.
static String isBalanced(String s) {
char a[] = new char[1000];
int top = 0,i=1;
a[0]=s.charAt(0);
char retBrack;
String result;
while(i<s.length() )
{
retBrack=findCorrBracket(s.charAt(top));
if(s.charAt(i)!=retBrack)
{
top++;
a[top]=s.charAt(i);
}
else
{
top--;
}
i++;
}
System.out.println(top);
if(top==-1)
{
result = "YES";
}
else
{
result = "NO";
}
return result;
}
for each character `c` in string `s`:
if `c` is an opening bracket:
PUSH`c` onto stack
else:
// `c` must be a closing bracket
if stack is EMPTY:
's` IS UNBALANCED
else:
POP top of stack into `b`
if `b` is not the correct matching opening bracket for `c`:
`s` IS UNBALANCED
end if
end if
end if
end for
if stack is EMPTY:
SUCCESS! (`s` is correctly balanced)
else:
`s` IS UNBALANCED
end if