具有SubPalindrom长度的递归Sub-Palindrom

时间:2018-12-06 16:07:20

标签: python python-3.x recursion

我正在尝试创建一个递归函数,以计算最大的回文。

例如最大的sub.pal。因为“字符”是“ carac”。

到目前为止,我已经实现了我的目标,但是仅使用了一个在其中添加值的全局变量“ length”,但是如果有人可以仅通过递归调用向我展示如何做到这一点,那就太好了。我首先尝试给该函数添加第二个参数(length = 0),并在调用该函数时向其添加值,但是我没有使其正常工作。

这是我的代码:

length = 0

def subpalindrom(s):
    global length
    if len(s) == 1:
        length += 1
        return True, length

    if len(s) == 0:
        return True, length

    elif s[0] != s[-1]:

        for i in range(len(s) - 1, int(len(s) / 2) - 1, -1):  # search right half, if there is smth. equal

        if s[0] == s[i]:
            length += 2
            return subpalindrom(s[1:i])  # if smth. is equal slice it, add length

        elif i == int(len(s) / 2):
            # if index i is at half of the string and nothing was found, continue with next val on left half
            return subpalindrom(s[1:])
    else:
        length += 2
        return subpalindrom(s[1:-1])


print(subpalindrom("character"))

如果有人能告诉我如何才能知道该函数在哪个时间复杂度,那就太好了。我会说这是O(log n),但这只是一个猜测。

编辑:T(n)= T(n-2)+ n / 2吗? 递归调用的T(n-2)(因为我们将2个元素切开了)和+ n / 2(因为for循环)?

谢谢您的时间!

1 个答案:

答案 0 :(得分:0)

很抱歉收到的最新份额,但是如果有人感兴趣,这就是我的处理方式:

const cookieController = require('../../controllers/cookie/controller');

module.exports = server => {
    server.route('/setUserAuthcookie').post((req, res) => {
        cookieController.createUserAuthCookie(req, res);
    });

    server.route('/getcookies').post((req, res) => {
        cookieController.getCookies(req, res);
    });
}