牛客网、括号序列

题目描述

在这里插入图片描述

解法:

import java.util.*;


public class Solution {
    int i = 0;
    /**
     * 利用栈匹配即可
     * @param s string字符串 
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        if(s==null) return false;
        Stack<Character> stack = new Stack<>();
        while(i<s.length()){
            char c = s.charAt(i);
            i++;
            switch(c){
                case '[':
                case '{':
                case '(':
                    //入栈:
                    stack.push(c);
                    break;
                case ']':
                         if(stack.isEmpty()) return false;
                         if(stack.peek()=='['){//匹配了一个
                             stack.pop();//出栈
                         }else return false;
                         break;
                case '}':
                         if(stack.isEmpty()) return false;
                         if(stack.peek()=='{'){//匹配了一个
                             stack.pop();//出栈
                         }else return false;
                         break;
                 case ')':
                         if(stack.isEmpty()) return false;
                         if(stack.peek()=='('){//匹配了一个
                             stack.pop();//出栈
                         }else return false;
                         break;
                default:
                      

            }
        }
        if(!stack.isEmpty()) return false;
        return true;
       
    }
}

在这里插入图片描述

### 牛客网华为机试算法题目解析 #### 题目一:矩阵链相乘优化 在处理矩阵链相乘问题时,可以通过动态规划来减少不必要的计算量。例如,在给定三个矩阵 A(10×30), B(30×5), 和 C(5×60),可以按照两种方式计算 (AB)C 或者 A(BC)[^1]。前者的计算复杂度为 \(10 \times 30 \times 5 + 10 \times 5 \times 60 = 4500\) 次乘法操作;而后者则需要 \(30 \times 5 \times 60 + 10 \times 30 \times 60 = 27000\) 次乘法操作。因此选择合适的括号位置能够显著降低运算成本。 #### 题目二:统计字符串中的特定字符数量 对于统计某个子串在母串中出现次数的问题,可以直接利用 Python 的内置 `count` 方法完成此任务。下面是一个简单的实现例子: ```python str1 = input() str2 = input() print(str1.lower().count(str2.lower())) ``` 上述代码片段展示了如何忽略大小写差异并计数指定字符或子串在整个输入字符串内的存在频率[^2]。 #### 题目三:十六进制转十进制整型数值 当涉及到不同基数之间的转换时,标准库提供了便捷的方法来进行此类变换。比如使用 C++ 中的 `std::stoi` 函数可以从字符串形式读取数据,并将其解释成相应类型的值。这里提供了一个基于该技术的小程序用于演示目的: ```cpp #include <iostream> using namespace std; int main(){ string str; cin >> str; cout << stoi(str, nullptr, 16) << endl; } ``` 这段源码实现了从用户那里接收一个表示十六进制数字的字符串作为输入参数,接着输出对应的十进制表现形式的结果[^3]。 #### 题目四:二十四点游戏逻辑设计 最后考虑这样一个经典益智类小游戏——即所谓的“二十四点”。它的基本规则是从一副扑克牌里随机抽取四张卡片(假设它们上面标记有介于1到9之间任意正整数),玩家尝试运用加减乘除四种基础算术运算符以及必要的圆括号改变优先级关系使得最终表达式的求值得恰好等于24即可获胜[^4]。 以下是解决这个问题的一种可能策略框架: - 枚举所有可能的操作序列; - 对每种情况应用递归回溯搜索找到满足条件的一组解决方案之一。 虽然具体编码细节超出了当前讨论范围之外,但是理解这些概念有助于构建实际应用程序版本的基础架构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨夜※繁华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值