• 力扣题解8/17


    20. 有效的括号

    给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

    有效字符串需满足:

    1. 左括号必须用相同类型的右括号闭合。
    2. 左括号必须以正确的顺序闭合。

    示例 1:

    输入:s = "()"
    输出:true
    

    示例 2:

    输入:s = "()[]{}"
    输出:true
    

    示例 3:

    输入:s = "(]"
    输出:false
    

    示例 4:

    输入:s = "([)]"
    输出:false
    

    示例 5:

    输入:s = "{[]}"
    输出:true

    接着道题需要运用栈的知识,建立一个栈来存储左括号,在当遍历到右括号时再将栈中的·左括号拿出来匹配,如果不匹配则返回false,当遍历到最后一个括号仍能匹配且栈中的左括号全部出栈时则表明这串括号符合要求,返回true;

    同时要想使符号串符合要求则每种括号必是成对出现,那么当符号串长度为奇数是可以直接返回false;

    判断括号是否匹配使用一种巧妙的方法设立一个函数当遇到右括号是返回相应的左括号再和栈中的左括号对比是否相等就可以实现左右括号的匹配。

    具体代码如下

    1. char pairs(char a) {
    2. if (a == '}') return '{';
    3. if (a == ']') return '[';
    4. if (a == ')') return '(';
    5. return 0;
    6. }
    7. bool isValid(char* s) {
    8. int n = strlen(s);
    9. if (n % 2 == 1) {
    10. return false;
    11. }
    12. int stk[n + 1], top = 0;
    13. for (int i = 0; i < n; i++) {
    14. char ch = pairs(s[i]);
    15. if (ch) {
    16. if (top == 0 || stk[top - 1] != ch) {
    17. return false;
    18. }
    19. top--;
    20. } else {
    21. stk[top++] = s[i];
    22. }
    23. }
    24. return top == 0;
    25. }

    21. 合并两个有序链表

    难度简单2612

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

    示例 1:

    输入:l1 = [1,2,4], l2 = [1,3,4]
    输出:[1,1,2,3,4,4]
    

    示例 2:

    输入:l1 = [], l2 = []
    输出:[]
    

    示例 3:

    输入:l1 = [], l2 = [0]
    输出:[0]

     这道题就是对链表知识的运用,建立一个新的链表,对比l1和l2的值,那个小就优先加入到新链表中,当其中一个链表到末尾后直接将另一个链表剩下的部分加到新链表后面,知道l1和l2都到末尾后输出新链表

    1. struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
    2. {
    3. struct ListNode* dummy = malloc(sizeof(struct ListNode));
    4. struct ListNode* cur = dummy;
    5. while(list1 && list2)
    6. {
    7. if(list1->val < list2->val)
    8. {
    9. cur->next = list1;
    10. list1 = list1->next;
    11. cur = cur->next;
    12. }
    13. else
    14. {
    15. cur->next = list2;
    16. list2 = list2->next;
    17. cur = cur->next;
    18. }
    19. }
    20. if(list1)
    21. cur->next = list1;
    22. else
    23. cur->next = list2;
    24. return dummy->next;
    25. }

  • 相关阅读:
    python的类属性和实例属性
    大数据集群修改服务器ip
    【软件测试】总结
    2023年【四川省安全员A证】模拟试题及四川省安全员A证作业模拟考试
    tf模型落地安卓之旧事重提
    模板匹配与像素统计
    springcloud环境搭建
    【OpenCV】-查找并绘制轮廓
    【BMC】Redfish简述
    快速修复“找不到xinput1_3.dll无法继续执行此代码的”问题的5个方法
  • 原文地址:https://blog.csdn.net/weixin_68131472/article/details/126390008