首页 > 解决方案 > 递归字符串匹配 - 在一个测试用例上给出相反的输出

问题描述

通过了 5/6 的测试用例和 3/3 的示例用例。未通过一个隐藏的测试用例

  1. 字符串以 . 开头a
  2. 每个a后面都跟没有或一个aor bb
  3. 每个bb后面都没有或a.

如果给定字符串遵循所有规则,则返回 true,否则返回 false。

样本输入:abbaabb

样本输出:真

#include <iostream>
using namespace std;

bool checkAB(char input[])
{
    bool answer = true;
    if (input[0] == 'P' && input[1] == '\0')
        return true;
    if (input[0] != 'P')
    {
        if (input[0] == 'a' && (input[1] == '\0' || input[1] == 'a' || (input[1] == 'b' && input[2] == 'b')))
        {
            input[0] = 'P';
            return checkAB(input);
        }
    }
    else if (input[0] == 'P')
    {
        if (input[1] == 'a' && (input[2] == '\0' || input[2] == 'a' || (input[2] == 'b' && input[3] == 'b')))
            answer = true;
        else if (input[1] == 'a' && (input[2] == 'b' && input[3] == 'a'))
            answer = false;

        if (input[1] == 'b' && input[2] == 'b' && (input[3] == '\0' || input[3] == 'a'))
            answer = true;
        else if (input[1] == 'b' && input[2] == 'b' && input[3] == 'b')
            answer = false;
    }

    if (answer == false)
        return false;
    else
    {
        input[1] = 'P';
        return checkAB(input + 1);
    }
}

int main()
{
    char input[100];
    bool ans;
    cin >> input;
    ans = checkAB(input);
    if (ans)
        cout << "true" << endl;
    else
        cout << "false" << endl;
}

我正在迭代输入数组并将 as 标记index 0'P'递归PASS并检查上述的连续输入3 rules。一旦任何一条规则被打破,我就会answer false递归返回,或者在我继续前进时保持答案true和索引 0,最后当我到达字符串末尾时,我会返回。'P'(input[0] == 'P' && input[1] == '\0')

标签: stringrecursiondata-structuressubstringstring-matching

解决方案


推荐阅读