Stack中怎么判断字符串是否合法
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关Stack中怎么判断字符串是否合法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。判断字符串是否合法是这样的:有一个字符串,
千家信息网最后更新 2026年11月02日Stack中怎么判断字符串是否合法
这篇文章将为大家详细讲解有关Stack中怎么判断字符串是否合法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
判断字符串是否合法是这样的:有一个字符串,它只包含大中小括号,那么符号 ([)] 这样是不合法的,合法的应该是这样: ([]) ,同样 ([]){ 这样的符号也是不合法的 基于以上的共识,咱们先考虑使用数组的方式,来分析一下。
定义一个初始值,如果刚开始输入的就是 ( 或者 { 或者 [ ,那么我们不能立刻判断到它就是不合法的,因为它需要等待匹配,如果到最后还是没有匹配上,那就是不合法的;如果刚开始输入的是 ) 或者 } 或者 ] ,我们立刻就能知道这是不合法的。
如果此时输入了 ( 和 [ ,初始值应该 ++ ,接下来输入的是右边的符号的话应该是 ] 而不是 ) ,此时需要进行判断第三个输入的字符是否匹配第二个,只有第二个也匹配之后才需要进行匹配第一个字符。
如果匹配成功,则初始值应该 - - ,所有字符串匹配完毕之后,需要看初始值是否为最初赋予的值,如果是则说明所有符号都是合法的,否则说明还有符号没有匹配上,则不合法 经过这样的分析之后,写代码应该就比较好写了,比如我们可以这样实现:
/**
* 判断字符串是否合法
* 比如: "([)]" 不合法, "[()]" 合法
*/
public class IsValidString {
public static void main(String[] args) {
// 定义字符串的内容
String symbol="([]){";
// 调用判断方法
boolean result=isValid(symbol);
System.out.print(result);
}
public static boolean isValid(String s){
// 用来接收传入的值
char[] arr = s.toCharArray();
// 定义一个数组,用来存放传入的字符串,长度为传入的字符串的值
char[] stack = new char[s.length()];
// 定义 stackEnd 为 -1 是为了让第一个元素能够进入数组,即 stackEnd++ 值为 0
int stackEnd=-1,length=s.length();
for(int i=0;i // 如果刚开始是左括号,左中括号等符号,则不能直接判断为该符号不合法,而是放入数组,等待匹配
if(arr[i]=='(' || arr[i]=='[' || arr[i]=='{'){
stackEnd++;
stack[stackEnd]=arr[i];
}
// 如果刚开始就是右括号,右中括号等符号,则不合法,直接返回 false
else if((arr[i]==']' || arr[i]==')' || arr[i]=='}') && stackEnd==-1){
return false;
}
else {
// 分情况来进行匹配
if(arr[i]==')' && stack[stackEnd]=='('){
stackEnd--;
}
else if(arr[i]==']' && stack[stackEnd]=='['){
stackEnd--;
}
else if(arr[i]=='}' && stack[stackEnd]=='{'){
stackEnd--;
}
else{
// 如果都匹配不到,说明该符号不合法,则直接返回 false
return false;
}
}
}
if(stackEnd!=-1){
// 如果最后结果不等于 -1 ,说明 stackEnd 中还有符号没有被匹配到,则也是不合法
return false;
}
else
return true;
}
}
可以明显看到,使用数组的话,会有很多 if , else , else if ,阿粉怎么闻到了坏代码的味道。
有没有更巧妙的方法呢?看下面:
/**
* 判断字符串是否合法
* 比如: "([)]" 不合法, "[()]" 合法
*/
public class IsValidString {
public static void main(String[] args) {
// 定义字符串的内容
String symbol="([]){";
// 调用判断方法
boolean result=isValid(symbol);
System.out.print(result);
}
public static boolean isValid(String s){
// 定义一个空栈
Stack stack=new Stack<>();
// 定义 map ,用来存放匹配的符号
Map map=new HashMap<>();
char[] arr=s.toCharArray();
map.put(')','(');
map.put(']','[');
map.put('}','{');
for (int i=0;i // 如果 map 中不包含进入的符号,说明是左边的符号,直接入栈即可
if (!map.containsKey(arr[i])){
stack.push(arr[i]);
}else {
// 如果进入的符号和栈顶的元素不匹配,则说明符号不合法
if (map.get(arr[i])!=stack.pop()){
return false;
}
}
}
// 最后判断栈是否为空,如果为空,说明所有符号都已匹配完毕,全都合法
// 如果栈不为空,说明还有符号没有匹配到,则不合法
if (stack.empty()){
return true;
}else {
return false;
}
}
}
关于Stack中怎么判断字符串是否合法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
符号
字符
字符串
合法
数组
输入
内容
就是
括号
方法
代码
元素
文章
更多
知识
篇文章
中括号
分析
不错
巧妙
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手磨咖啡
互联网科技名片
上海卓越科技互联网
深圳九邦互联网科技有限公司
互联网与科技金融数据
北京互联网科技有限公司
善班互联网科技
卓越科技(互联网 )
米客互联网科技
互联网科技博客
上海卓越科技 互联网
互联网科技公司介绍
哈尔滨新华互联网科技
成都玖崟互联网科技有限公司乐商圈怎么样
互联网系的金融科技公司
青海科技产业互联网发展
如何创新互联网科技
互联网在线教育科技创业
皮皮虾互联网科技有限公司
上海创道互联网络科技有限公司
与互联网科技公司
上海挚品互联网科技
万易互联网科技有限公司
银优互联网科技有限公司
互联网科技英文翻译
创业天下互联网科技有限公司
互联网科技中介
互联网科技创新服务
梅州GM互联网络科技有限公司
科技互联网公司两年变化