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;
}

 

posted @ 2016-12-16 10:26  司马_羽鹤  阅读(118)  评论(0编辑  收藏  举报