1239. 串联字符串的最大长度

127 阅读1分钟

题目:
给定一个字符串数组 arr,字符串 s 是将 arr 的含有 不同字母 的 子序列 字符串 连接 所得的字符串。

请返回所有可行解 s 中最长长度。

子序列 是一种可以从另一个数组派生而来的数组,通过删除某些元素或不删除元素而不改变其余元素的顺序。

算法:
方法一:回溯 思路知道,如何写出简洁的代码。

func maxLength(arr []string) int {
    return backtrack(arr, 0, 0)
    
}
func backtrack(arr []string, index, bitFlag int) int {
    if index == len(arr) {
        return 0
    }
    bitFlagCopy := bitFlag
    for i := range arr[index] {
        bit := 1 << (arr[index][i] - 'a')
        // 肯定用位运算标记字符是否重复出现是最好的,其他的方法map就别想了
        if (bitFlag & bit) > 0 {
            return backtrack(arr, index + 1, bitFlagCopy)
        }
        bitFlag = bitFlag | bit
    }
    return max(len(arr[index]) + backtrack(arr, index + 1, bitFlag), backtrack(arr, index + 1, bitFlagCopy))
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}