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