2012-03-13 29 views
-4

例如如何使用遞歸檢查2個字符串是否相似?

check("abs","abc");// Return true 
check("ab","ac");// Return false 
check("ab","abc");// Return false 

你會怎麼寫這個方法遞歸

 public static boolean check(String s1, String s2) { 
if (s1.equals(s2)) { 
return 1; 
if (s1.length < s2.length) { 
return 0; 
if (s1.length > s2.length) { 
return 0; 
if (s1.length == s2.length) { 
for (int i; i< s1.length; i++){ 
if(s1.charAt[i].equalss2.charAt[i]) { 
return 1 

    ?? 
    } 

我做了一些修改,並試圖通過自己的第一種方法,但我不知道如果這個代碼可以編譯或做什麼,我希望它能做到。

+2

這功課嗎? – ibid 2012-03-13 05:04:36

+4

您的示例顯示'check(「abs」,「abc」)'返回true和false。 – JoshRagem 2012-03-13 05:05:48

+0

第一個和第三個例子是相同的,但首先打印真實,第三個錯誤? – shift66 2012-03-13 05:09:09

回答

0

無需使用遞歸,您可以通過使用該

public static boolean check(String s1, String s2) { 
    int count = 0; 
    if (s1.length() != s2.length()) { 
     return false; 
    else { 
     for (int i=0; i< s1.length(); i++){ 
      if(s1.charAt(i) != s2.charAt(i)) 
       return false; 
      count = i; 
     } 
     if(count == s1.length()-1) 
      return true; 
    } 
    return false; 
} 
+6

這顯然是功課,所以他不允許這樣做。但無論如何,讓我們不要給他一個答案,直到他告訴我們他至少做了一些工作,試圖解決這個問題。我們不要鼓勵他懶惰的行爲。 – 2012-03-13 05:07:36

0

我假設你想這樣做,因爲它是一個任務,不是因爲它是一個好主意實現這一目標。 :)所以我不會寫代碼的你,但邏輯是這樣的:

  • 如果兩個字符串都是空的,他們是平等的
  • 如果兩個字符串有第一個字符,然後他們是相等的,如果第一個字符是相等,其餘字符串相等(遞歸步驟)
  • 否則字符串不相等
0

你通常不會遞歸寫這篇文章,但如果你真的堅持,顯而易見的方法是比較字符串的第一個字符和(遞歸)其餘(和返回值是兩個邏輯and)。當/如果你到最後(空字符串)那些也是平等的。

0

Recursion:

在數學和計算機科學,一類對象或方法表現出遞歸的行爲時,他們可以通過兩個屬性進行定義:

A simple base case (or cases), and 
A set of rules which reduce all other cases toward the base case. 

所以,你必須定義這兩個屬性並在該方法中實現它。 這種基本情況通常在某些特殊值上定義,如0""

在你的例子中,你可以定義當兩個字符串都是""時會發生什麼。 (基本情況)

其他財產必須導致基本情況,意味着通過這個規則你必須達到基本情況。在你的情況下,空字符串""

此屬性可能是某種substring-操作將導致""(基本情況)。所以這個規則可能是:如果第一個字符和剩餘的字符串(通過check(remaining string遞歸)相等,則字符串是相等的。

相關問題