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;
    }
  • 相关阅读:
    快递员—你惹不起的“组织”
    BF的真正意义
    读书:《四点起床-最养生和高效的时间管理》
    你究竟有多想成功?汗水铸造巨星(中英结合版含视频)
    美国女生给我的六个惊诧(转)
    据说是世界上最健康的作息
    少走弯路的十条忠告
    编程—休息片刻的好处
    学电脑必懂的53个英文单词和缩写
    四件在我步入职业软件开发生涯那天起就该知道的事情
  • 原文地址:https://www.cnblogs.com/simayuhe/p/6185896.html
Copyright © 2011-2022 走看看