如下所示的问题谜题
对于两个字符串A和B,我们将字符串的相似性定义为两个字符串共有的最长前缀的长度。例如,字符串“abc”和“abd”的相似性是2,而字符串“aaa”和“aaab”的相似性是3。 计算字符串S与每个后缀的相似之和。
我编写了以下解决方案,它只能传递三个测试用例,但是我无法弄清楚它失败的测试用例,你能帮我弄清楚它失败的场景吗? / p>
示例输入: 2 ababaa AA
示例输出: 11 3
说明: 对于第一种情况,字符串的后缀是“ababaa”,“babaa”,“abaa”,“baa”,“aa”和“a”。每个字符串与字符串“ababaa”的相似性分别为6,0,3,0,1,1。因此答案是6 + 0 + 3 + 0 + 1 + 1 = 11.
对于第二种情况,答案是2 + 1 = 3.
def find_suffix(string):
if len(string) == 0:
return 0
tail = 0
head = 1
occurences = [1]
while head < len(string):
if string[head] == string[tail]:
occured = occurences[tail] + 1
tail = tail + 1
else:
if string[0] == string[head]:
occured = 2
tail = 1
else:
occured = 1
tail = 0
occurences.append(occured)
head = head + 1
return sum(occurences)
答案 0 :(得分:0)
我不知道python。我用方案语言编写了这段代码。它适用于DrRacket
(define inp-string (read))
(define inp-list (string->list inp-string))
(define (sim-len l1 l2)
(cond ((or (null? l1) (null? l2)) 0)
((char=? (car l1) (car l2)) (+ 1 (sim-len (cdr l1) (cdr l2))))
(else
0)))
(define inp-strlen (string-length inp-string))
(define iter-cnt 0)
(define final-ans 0)
(define (sum-of-sim l)
(define (iter count)
(cond ((null? l) 0)
((= iter-cnt inp-strlen) 0)
(else
(set! final-ans (+ final-ans
(sim-len inp-list (string->list (substring inp-string iter-cnt inp-strlen)))))
(set! iter-cnt (+ iter-cnt 1))
(iter iter-cnt))))
(iter iter-cnt))
(sum-of-sim inp-list)
final-ans
我测试的案例如下:
输入: - “”final-ans = 0,输入: - “r”final-ans = 1,输入: - “rajesh”final-ans = 6,输入: - “rajesh bhat”final-ans = 11 ,输入: - “rajraj”final-ans = 9,输入: - “aaaaaa”final-ans = 21
其他案件有哪些?希望这可以帮助。