2012-11-01 38 views
1
if (isSubstring(str1, str2)) 
System.out.println(str1 + " is a substring of " + str2 + ".") 

這裏是於issubstring方法:如何使一個遞歸布爾法「於issubstring(STR1,STR2)」

public static boolean isSubstring(String str, String target) 
    { 
     if (str == target) 
      return true; 

     return (isSubstring(str, target.substring(0,5)));    
    } 

這就是我在代碼的權利,現在我可以你不知道怎麼去解決這個問題。我的導師要求我們使用遞歸,所以返回必須調用它自己。通常,這個問題可以很容易地只用一行代碼來完成:

public static boolean isSubstring(String str, String target) 
{ 
return str.contains(target) 
} 

但我必須做毫無意義的使用遞歸來解決這個問題,這是非常令人沮喪知道如何瑣碎這種方法是如何過於複雜我的導師是迫使我們去做這個。我不知道從哪裏開始,因爲「return str.contains(target)」並不能爲我解決這個問題提供一個很好的基礎。

回答

0

一個問題是:在比較字符串/對象時,使用equals()而不是====比較參考平等。 equals()比較內容是否相等。

if (str == target) 

if (str.equals(target)) 
0

比較與equals()方法字符串:改變

if (str == target) 

if (str.equals(target)) 
+0

嘿只是FYI你的網站鏈接是sessionful,所以它只是指向誰點擊它們到他們自己的linkedin個人資料 - 你想使用公共個人資料鏈接。 –

+0

@PaulBellora感謝隊友......我現在改變它:P – PermGenError

1

有兩件事情:

首先,你有正確的想法,但是你想讓'下一個'字符串搜索一個比當前字符串小的字符串。所以如果你在看漢堡包的話,你可以先搜索一下amburger,然後是mburger。所以當你再次發現時,你可能會嘗試類似return isSubstring(str,target.substring(1))現在你似乎使用數字5來取前5個字符。這很奇怪,因爲你第一次這樣做,(Hamburger to Hambu)你永遠無法再做到這一點。如果你的原始目標是「火腿」,那麼你立即就會炸彈!不太好。

其次,僅僅測試它是否相等是不夠的。用漢堡包的例子,如果你在尋求衝動,你會找到迫切的,然後去右手。你永遠不會得到衝動。因此,而不是等於測試,而是用beginsWith()進行測試。 (如果你從後面收縮,如漢堡漢堡漢堡,那麼你會使用endsWith()。)

最後,如果你沒有達到目標,你還沒有一個好的路徑去做什麼。目標。如果您的目標爲xyzzy,而您正在搜索bob,則不會找到它。所以你需要一個「基本案例」,我推薦使用它作爲第一行。有些說「如果令牌不可能在目標中,那麼我們馬上返回假」。

這很難,它的沮喪,似乎毫無意義。但請記住,他不是在教你搜索字符串。這很愚蠢,你知道如何搜索字符串!他試圖教你遞歸,這並不容易「得到」。

0

好吧,我知道了,阿薩德的建議很有用。這裏是isSubstring的工作方法:

public static boolean isSubstring(String str, String target) 
{ 
    if (target.length() == 0) 
     return false; 

    if (str.equals(target)) 
     return true; 

    else  
    return (isSubstring(str, target.substring(0,target.length()-1)));    
} 

我不確定第二個「if」是否應該是「else if」。

0

你知道,功能適用於:

  • 基本情況)一個空字符串,必須返回false;
  • 基本情況)一個字符串以你找的那個字符開始,必須返回true;
  • rec case)否則,刪除第一個字符並檢查字符串的其餘部分。

下面的代碼在Java中:

public static boolean isSubstring(final String str1, final String str2) { 
    if ((str1 == null) || (str2 == null) || str1.isEmpty()) { 
     return false; 
    } else if (str1.startsWith(str2)) { 
     return true; 
    } else { 
     return isSubstring(str1.substring(1), str2); 
    } 
} 

測試:

public static void main(final String[] args) { 
    System.out.println(isSubstring("hello this is a simple test", "is a")); 
} 

輸出:

true 
相關問題