对于哪些情况,我对此难题的解决方案失败了

时间:2012-05-04 13:25:54

标签: algorithm puzzle testcase

如下所示的问题谜题

对于两个字符串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)

1 个答案:

答案 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

其他案件有哪些?希望这可以帮助。