标签:des style blog http color os io 使用 ar
Regular Expression Matching
Problem description:
Implement regular expression matching with support for ‘.‘
and ‘*‘
.
‘.‘ Matches any single character. ‘*‘ Matches zero or more of the preceding element. The matching should cover the entire input string (not partial). The function prototype should be: bool isMatch(const char *s, const char *p) Some examples: isMatch("aa","a") → false isMatch("aa","aa") → true isMatch("aaa","aa") → false isMatch("aa", "a*") → true isMatch("aa", ".*") → true isMatch("ab", ".*") → true isMatch("aab", "c*a*b") → true
解题思路:
不是显式DP问题(保存一张表),用Recursion的思路可解。
1)若p[j+1] != ‘*‘,那么判断p[j]和s[i]的结果就可以了。
p[j]==s[i]或者p[j]==‘.‘,到当前位置是匹配的,继续向下判断;不满足条件,说明当前位置不匹配。
2)若p[j+1]==‘*‘,那么需要循环判断p[j+2]和s[i...n]是否匹配.
代码如下:
1 class Solution { 2 public: 3 bool isMatch(const char *s, const char *p) { 4 if(*p == 0) 5 return *s == 0; 6 7 if(*(p+1) != ‘*‘) 8 { 9 if(*s != 0 && (*p == *s || *p == ‘.‘)) 10 return isMatch(s+1, p+1); 11 else 12 return false; 13 } 14 else 15 { 16 while(*s != 0 && (*p == *s || *p == ‘.‘)) 17 { 18 if(isMatch(s, p+2)) 19 return true; 20 21 s++; 22 } 23 return isMatch(s, p+2); 24 } 25 } 26 };
Longest Valid Parentheses
Problem description:
Given a string containing just the characters ‘(‘
and ‘)‘
, find the length of the longest valid (well-formed) parentheses substring.
For "(()"
, the longest valid parentheses substring is "()"
, which has length = 2.
Another example is ")()())"
, where the longest valid parentheses substring is "()()"
, which has length = 4.
解题思路:
不是用DP解决的,用stack解决。使用pair<char, int>保存字符和位置。
1)如果s[i]==‘(‘,则压入栈;
2)如果s[i]==‘)‘,则判断st.top()是否是‘(‘,如果是则弹出栈;否则压入栈。
代码如下:
1 class Solution { 2 public: 3 int longestValidParentheses(string s) { 4 stack<pair<char,int> > st; 5 int len = s.length(); 6 7 if(len <= 1) 8 return 0; 9 10 pair<char,int> start(‘)‘,-1); 11 st.push(start); 12 int res = 0; 13 for(int i = 0; i < len; ++i) 14 { 15 if(s[i] == ‘(‘) 16 { 17 pair<char,int> node(s[i],i); 18 st.push(node); 19 } 20 else 21 { 22 pair<char,int> top = st.top(); 23 if(top.first == ‘(‘) 24 { 25 st.pop(); 26 res = max(res, i-st.top().second); 27 } 28 else 29 { 30 pair<char,int> node(s[i],i); 31 st.push(node); 32 } 33 34 } 35 } 36 37 return res; 38 } 39 };
标签:des style blog http color os io 使用 ar
原文地址:http://www.cnblogs.com/JunxuanBai/p/3961711.html