• 力扣题解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. }

  • 相关阅读:
    Vite探索:构建、启程、原理、CSS艺术与插件魔法
    为什么很多新型编程语言都抛弃了 C 语言风格的 for 语句?
    SQL语法之PRIMARY KEY 约束
    12 设计推特----来源于陈C同学(CC)
    Zabbix Proxy分布式监控
    分布式中的常见问题
    高斯算法的原理及其与常规求和方法的区别
    面试题____Java小白找工作必须领悟的修仙秘籍(二)
    React wangEditor5 使用说明
    分类模型的Top 1和Top 5
  • 原文地址:https://blog.csdn.net/weixin_68131472/article/details/126390008