Redian新闻
>
一道leetcode变种,twitter常考,怎么做?
avatar
一道leetcode变种,twitter常考,怎么做?# JobHunting - 待字闺中
w*r
1
target只有5个,发了5个号,我花60块钱把另外3个人的给买了,有一个不卖,现在在
BB排队,前面有50多个人
avatar
S*C
2
pattern match的题
// Text: a-z, A-Z, 0-9
// Pattern: a-z, A-z, 0-9, +, *
// + = 1 or more times
// * = 0 or more times. [email protected]/* */ 3 acres
//
// Pattern: a+b
// Text: aab, b return true-google 1point3acres
//
// Pattern: a+b*
// Text: aab, aa return true
avatar
L*1
3
风神带上俺扫货吧。。。
avatar
I*s
4
a+b应该不match b吧?
代码如下:
bool match(const char * s, const char * p) {
if (! *p) return ! *s;
if (*(p + 1) == '*') {
// match(s+1, p) - match next char in s.
// match(s, p+2) - match exactly nothing in s.
if (*p == *s) return match(s+1, p) || match(s, p+2);
else return match(s, p+2); // matche exactly nothing in s.
}
else if (*(p + 1) == '+') {
// match(s+1, p) - match next char in s.
// match(s+1, p+2) - match exactly 1 char in s.
if (*p == *s) return match(s+1, p) || match(s+1, p+2);
else return false;
}
else if (*p == *s) {
return match(s+1, p+1); // match exactly 1 char in s.
}
else {
return false;
}
}

【在 S*******C 的大作中提到】
: pattern match的题
: // Text: a-z, A-Z, 0-9
: // Pattern: a-z, A-z, 0-9, +, *
: // + = 1 or more times
: // * = 0 or more times. [email protected]/* */ 3 acres
: //
: // Pattern: a+b
: // Text: aab, b return true-google 1point3acres
: //
: // Pattern: a+b*

avatar
a*y
5
LOL
avatar
S*C
6
a+b不match b,但很多test case通不过,看看怎么回事
public class Solution {
public boolean match(String s, String p) {
return match(s, 0, p, 0);
}
private boolean match(String s, int i, String p, int j) {
if (j >= p.length() - 1) {
return i >= s.length() - 1;
} else if (i >= s.length() - 1) {
return j >= p.length() - 1;
}
if (p.charAt(j + 1) == '*') {
// match(s+1, p) - match next char in s.
// match(s, p+2) - match exactly nothing in s.
if (s.charAt(i) == p.charAt(j))
return match(s, i + 1, p, j) || match(s, i, p, j + 2);
else
return match(s, i, p, j + 2); // matches exactly nothing in
s.
} else if (p.charAt(j + 1) == '+') {
// match(s+1, p) - match next char in s.
// match(s+1, p+2) - match exactly 1 char in s.
if (s.charAt(i) == p.charAt(j))
return match(s, i + 1, p, j) || match(s, i + 1, p, j + 2);
else
return false;
} else if (s.charAt(i) == p.charAt(j)) {
return match(s, i + 1, p, j + 1); // match exactly 1 char in s.
} else {
return false;
}
}
public static void main(String args[]) {
test("aab", "a+b");//true
test("aab", "aab");//true
test("aab", "aa*b");//true
test("aab", "a+b*");//true
test("aab", "aa+b");//true
test("aab", "a+b+");//true
test("aab", "a+b*");//true
test("aab", "aaa+b");//false
test("aab", "a+bb+");//false
}
static void test(String s, String p) {
System.out.println(sol.match(s, p));
}
static Solution sol = new Solution();
}

【在 I**********s 的大作中提到】
: a+b应该不match b吧?
: 代码如下:
: bool match(const char * s, const char * p) {
: if (! *p) return ! *s;
: if (*(p + 1) == '*') {
: // match(s+1, p) - match next char in s.
: // match(s, p+2) - match exactly nothing in s.
: if (*p == *s) return match(s+1, p) || match(s, p+2);
: else return match(s, p+2); // matche exactly nothing in s.
: }

avatar
x*1
7
liar, you paid 30 bucks, i saw it.

【在 w*********r 的大作中提到】
: target只有5个,发了5个号,我花60块钱把另外3个人的给买了,有一个不卖,现在在
: BB排队,前面有50多个人

avatar
I*s
8
这涉及到C++转换成Java的一点小技巧。这样改就可以都通过了:
private boolean match(String s, int i, String p, int j) {
if (j == p.length()) return i == s.length();
if (j + 1 < p.length() && p.charAt(j + 1) == '*') {
// match(s+1, p) - match next char in s.
// match(s, p+2) - match exactly nothing in s.
if (i < s.length() && s.charAt(i) == p.charAt(j))
return match(s, i + 1, p, j) || match(s, i, p, j + 2);
else
return match(s, i, p, j + 2); // matches exactly nothing in
s.
} else if (j + 1 < p.length() && p.charAt(j + 1) == '+') {
// match(s+1, p) - match next char in s.
// match(s+1, p+2) - match exactly 1 char in s.
if (i < s.length() && s.charAt(i) == p.charAt(j))
return match(s, i + 1, p, j) || match(s, i + 1, p, j + 2);
else
return false;
} else if (i < s.length() && s.charAt(i) == p.charAt(j)) {
return match(s, i + 1, p, j + 1); // match exactly 1 char in s.
} else {
return false;
}
}
avatar
S*C
9
谢谢,你真牛啊

in

【在 I**********s 的大作中提到】
: 这涉及到C++转换成Java的一点小技巧。这样改就可以都通过了:
: private boolean match(String s, int i, String p, int j) {
: if (j == p.length()) return i == s.length();
: if (j + 1 < p.length() && p.charAt(j + 1) == '*') {
: // match(s+1, p) - match next char in s.
: // match(s, p+2) - match exactly nothing in s.
: if (i < s.length() && s.charAt(i) == p.charAt(j))
: return match(s, i + 1, p, j) || match(s, i, p, j + 2);
: else
: return match(s, i, p, j + 2); // matches exactly nothing in

avatar
I*s
10
哈哈哈,不用客气。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。