如何查找并检查给定字符串中是否存在任何子字符串及其反转?

时间:2017-11-12 05:54:59

标签: string algorithm

示例

假设给出的字符串是'abccbaad'

然后,子字符串将为'abc',其反向将为'cba'

都存在于给定的字符串中。

你怎么能找到他们两个?

请尽可能提供代码段。

注意:子字符串的长度> 1

更新:来自某个位置的子字符串中使用的字符不应再用于反向字符串。

例如。 假设索引2中的'c'在子字符串中使用,那么它也不应该在反向字符串中使用,但允许来自索引3的'c'。

1 个答案:

答案 0 :(得分:1)

我假设您要找到所有子字符串,其反向也出现在给定字符串中

在这种情况下,建立在这个答案之上 - find all substrings

def get_all_substrings(input_string):
    output_strings = list()
    length = len(input_string)
    for i in xrange(length): # Iterate through all indices of the string
        for j in xrange(i + 1, length):  # Iterate through indices starting from i + 1 to end of the string, so as to obtain substrings of length > 1
            substr = input_string[i:j + 1] # Slice the substring
            if substr[::-1] in input_string: # Check if the substring's reverse exists in the original string
                output_strings.append(substr) # If it does, add it to a list
    return output_strings
print get_all_substrings("abccbaad") # Output - ['ab', 'abc', 'abcc', 'abccb', 'abccba', 'bc', 'bcc', 'bccb', 'bccba', 'cc', 'ccb', 'ccba', 'cb', 'cba', 'ba', 'aa']