zoukankan      html  css  js  c++  java
  • Leetcode 题目整理-5 Valid Parentheses & Merge Two Sorted Lists

    20. Valid Parentheses

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

    The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

    注:给出一些有括号组成的字符串,判断这些字符串是否合法。不知道这里是否考虑空格的因素还是所有的字符都是括号,还有就是应该考虑嵌套的格式,如(){[]}个人理解应该是合法的。

    代码如下:

    bool Solution::isValid(string s)
    {
        bool flag{ 0 };
        if (s.size() == 0)
        {
            return flag = 1;
        }
        map<char, char> side;
        side['('] = 'l';side['{'] = 'l';side['['] = 'l';side[')'] = 'r';side['}'] = 'r';side[']'] = 'r';
        map<char, char> group;
        group[')'] = '('; group['}'] = '{'; group[']'] = '[';//通过右括号索引左括号
        for (string::iterator s_i = s.begin(); s_i != s.end(); )
        {
            if (side[*s_i] == 'r')//找第一次出现右括号的点
            {
                if (s_i == s.begin())
                {
                    return flag = 0;//如果开始就出现了右括号,那是非法的,返回即可
                }
                if (group[*s_i] == *(s_i - 1))
                {
                    s.erase(s_i - 1);
                    s.erase(s_i - 1);//相等说明是对的,那就把正确的这一对儿删除掉,指针要向前移动一位
                    if (s.size() == 0)
                    {
                        return flag=1;//如果删完没有了,就返回认为是正确的
                    }
                    else{
                        s_i--;
                    }
                }
                else
                {
                    return flag = 0;//如果不相等说明排列有问题,返回
                }
            }
            else
            {
                s_i++;//如果出现的不是右括号就移动到下一个
            }
        }
        
        return flag;//如果所有的都是左括号,那么最后将在这里返回 0
    }

    21. Merge Two Sorted Lists

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

    注:合并两个有序链表,并且不能丢弃其中任何一个node。

    解:代码过程中出现一个问题就是对空链表如何处理,第二个问题就是竟然要排序,又重新添加了一遍。

    ListNode* Solution::mergeTwoLists(ListNode* l1, ListNode* l2)
    {
        ListNode *head = new ListNode(0);//这是要返回的那个值
        ListNode *temp;
        temp = head;
        while (l1 != NULL || l2 != NULL)
        {
            //只要有一个不为零就执行下列程序
            if (l1 == NULL)
            {
                temp->next = l2;
                l2 = l2->next;
            }
            else
            {
                if (l2 == NULL)
                {
                    temp->next = l1;
                    l1 = l1->next;
                }
                else
                {//如果都不是空的
                    if (l1->val > l2->val)
                    {//取小的放在前边
                        temp->next = l2;
                        l2 = l2->next;
                    }
                    else{
                        temp->next = l1;
                        l1 = l1->next;
                    }
                }
            }
            temp = temp->next;//每次都要有两个指针同时前进
        }
        //把刚才建立的头删掉
    
    
        return head->next;
    }
  • 相关阅读:
    VueJS
    Nacos 微服务注册发现配置中心
    精简自己20%的代码(异常的处理)
    lazarus 检测内存泄漏
    winsocket练习一 阻塞与select模型
    js原型链解析
    块元素 父子外边距现象
    行高的继承
    行内元素(文字)垂直平居中
    本地文件播放
  • 原文地址:https://www.cnblogs.com/simayuhe/p/6185896.html
Copyright © 2011-2022 走看看