首先,看这个标题,这是一个字符串的入门级算法题。题目的大致内容如下:
举例子:一个括号[] {} ()必须成对的出现,如果是[(]则是不合法的字符串
实际的代码实现,我们可以考虑采用栈这样的结构,这种设计先后对应且是一一对应的匹配模式,我们在数据结构中也需要第一时间想到栈这样的数据结构。
具体的代码实现如下:
/**
* 补充栈里面的几个方法描述
* push是压栈
* peek是取栈顶的元素
* pop是弹出栈顶
*/
public class code_005_String02 {
public static void main(String[] args) {
String s = "()[]{}";
Stack<Character> sc = new Stack<>();
char[] c = s.toCharArray();
for (int i = 0; i < c.length; i++) {
if(c[i]=='('||c[i]=='['||c[i]=='{'){
sc.push(c[i]);
}else if(c[i]==')'){
if(sc.peek()=='('){
sc.pop();
}
}else if(c[i]==']'){
if(sc.peek()=='['){
sc.pop();
}
}else if(c[i] =='}'){
if(sc.peek() == '{'){
sc.pop();
}
}
}
if(sc.empty()){
System.out.println("是成对的合法的字符串");
}else{
System.out.println("是不合法的字符串");
}
}
}
当然也有其他的同学写过如下的一种实现方法:
//判断一个字符串括号是否合法
/**
* 举例子:一个括号[] {} ()必须成对的出现,如果是[(]则是不合法的字符串
*/
public class code_005_String01 {
//首先写一个特殊的实现方式
public static void main(String[] args) {
String s = "{}]()";
boolean valid = isValid(s);
if (valid == true){
System.out.println("是合法的字符串");
}else{
System.out.println("不是合法的字符串");
}
}
public static boolean isValid(String s){
int length;
do{
length = s.length();
s = s.replace("()","").replace("[]","").replace("{}","");
}while(length != s.length());
return s.length()==0;
}
}
上面的这段代码呢,思维上很取巧,但是时间复杂度还是没有第一种好。