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;
    }
  • 相关阅读:
    yii 引入文件
    CodeForces 621C Wet Shark and Flowers
    面试题题解
    POJ 2251 Dungeon Master
    HDU 5935 Car(模拟)
    HDU 5938 Four Operations(暴力枚举)
    CodeForces 722C Destroying Array(并查集)
    HDU 5547 Sudoku(dfs)
    HDU 5583 Kingdom of Black and White(模拟)
    HDU 5512 Pagodas(等差数列)
  • 原文地址:https://www.cnblogs.com/simayuhe/p/6185896.html
Copyright © 2011-2022 走看看