题目
输入a b c 三个字符串,判断c是否是a、b中的字符,并且分别按在a、b中的顺序出现在c里
#include
using namespace std;
// case 0 , nomal
// case 1 , null
// case 2 , a、b重复
// case 3 , a 或 b有叠词
// case 4 , a、b 字符串逆序
bool foo(char* a, int sa, char* b, int sb, char* c, int sc) {
if (nullptr == a || nullptr == b || nullptr == c ) {
return false;
}
if (sa < 0 || sb < 0 || sc < 0) {
return false;
}
if ( sa + sb != sc) {
return false;
}
if (*c != *a && *c != *b) {
return false;
}
if (sa == 0 && sb == 0 && sc == 0) {
return true;
}
if (*a == *b && sa > 0 && sb > 0) {
bool check = false;
check |= foo(a+1, sa-1, b, sb, c+1, sc-1);
check |= foo(a, sa, b+1, sb-1, c+1, sc-1);
return check;
} else if (*a == *c && sa > 0) {
return foo(a+1, sa-1, b, sb, c+1, sc -1);
} else if (*b == *c && sb > 0) {
return foo(a, sa, b+1, sb-1, c+1, sc-1);
}
return true;
}
int main() {
cout << "0 foo expect 1:" << foo("",0, "",0, "",0) << endl;
cout << "1 foo expect 1:" << foo("abc",3, "123",3, "a1b2c3",6) << endl;
cout << "2 foo expect 0:" << foo("acb",3, "123",3, "a1b2c3",6) << endl;
cout << "3 foo expect 0:" << foo("acb",3, "123",3, "a1b2b3",6) << endl;
cout << "4 foo expect 0:" << foo("acc",3, "123",3, "a1b2c3",6) << endl;
cout << "5 foo expect 1:" << foo("acc",3, "123",3, "acc123",6) << endl;
cout << "6 foo expect 1:" << foo("acc",3, "1b23",4, "a1cbc23",7) << endl;
cout << "6 foo expect 0:" << foo("acc",3, "1b23",4, "a1cbc2",6) << endl;
return 0;
}
- 题目来自今日头条