[LeetCode]044-Wildcard Matching
2015-12-30 21:24
357 查看
题目:
‘?’ Matches any single character.
‘*’ Matches any sequence of characters (including the empty sequence).
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”, “*”) → true
isMatch(“aa”, “a*”) → true
isMatch(“ab”, “?*”) → true
isMatch(“aab”, “c*a*b”) → false
Solution(1):
先想到用递归,超时:
Solution(2):
参考C语言版代码后,整理出C++版本。
‘?’ Matches any single character.
‘*’ Matches any sequence of characters (including the empty sequence).
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”, “*”) → true
isMatch(“aa”, “a*”) → true
isMatch(“ab”, “?*”) → true
isMatch(“aab”, “c*a*b”) → false
Solution(1):
先想到用递归,超时:
bool isMatch(string s, string p) { int i; if(p.size() == 0) return s.size() == 0?true:false; if(p[0] == '*') { i = 0; while(p[i] == '*') i++; p = p.substr(i); for(i = 0;i<s.size();i++) { if(s[i] == p[0]) { string m = s.substr(i); if(isMatch(m,p)) return true; } } //while(s.size()>0) //{ // if(isMatch(s,p)) // return true; // s = s.substr(1); //} return isMatch(s,p); } else if(s.size() > 0 && (s[0] == p[0] || p[0] == '?')) { return isMatch(s.substr(1),p.substr(1)); } return false; }
Solution(2):
参考C语言版代码后,整理出C++版本。
bool isMatch(string s, string p) { int star_index = -1; int s_index = 0; int i = 0; int j = 0; if(p.size() == 0) return s.size() == 0?true:false; while(i < s.size()) { if(j < p.size() && (p[j] == s[i] || p[j] == '?')) { i++; j++; continue; } if(j < p.size() && p[j] == '*') { j++; star_index = j; s_index = i; continue; } if(star_index != -1) { j = star_index; s_index ++; i = s_index; continue; } return false; } while(j < p.size() && p[j] == '*') j++; return j == p.size()?true:false; }
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解