2013-05-13 37 views
-1

這個邏輯是什麼錯了我想出了這個邏輯找到兩個長度相等的字符串的最長的共同孩子,但它只能在簡單的輸出成功運行,並失敗其他人,請指導我我是什麼在這裏做錯了。這個邏輯找到最長的字符串

 String a, b; 
     int sum = 0; 
     int[] ar,br; 
     ar = new int[26]; 
     br = new int[26]; 
     a = Console.ReadLine(); 
     b = Console.ReadLine(); 
     for (int i = 0; i < a.Length; i++) 
     { 
      ar[(a[i] - 65)]++; 
      br[(b[i] - 65)]++; 


     } 

     for(int i =0;i<ar.Length;i++) 
     { 
      if (ar[i] <= br[i]) { sum += ar[i]; } 
      else sum += br[i]; 
     } 
     Console.Write(sum); 
     Console.ReadLine(); 

輸出: AA BB 正確。 HARRRY SALLY 2正確

兩個以上的投入運行,但是當我提出評價在他們的試驗失敗辦案。斜面訪問他們testacase上我的邏輯fails.i想知道哪裏我的邏輯失敗。

+4

http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Retrieve_the_Longest_Substring – 2013-05-13 19:52:34

+0

或許,如果你用「哈利」和「突破口」,而不是「哈利」和「SALLY」 ... – 2013-05-13 19:54:30

+0

試過@大寫字母MatthewWatson ascii的值以65開頭..所以它是正確的。 – thunderbird 2013-05-13 19:57:10

回答

1

你的第二個循環都是錯誤的。它只是簡單地找出在這兩個數組中出現的字符的計數,並且計數僅用no來更新。的字符串中包含的通用字符包含至少no。這些常見字符。

請參閱此鏈接的正確實施。 http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Retrieve_the_Longest_Substring

在使用輸入字符串之前,還要使用String.ToUpper將輸入轉換爲大寫字符。