2013-05-11 50 views
3

我需要查找給定字符串中是否包含給定字符串。但是約束是我無法使用任何預定義的Java方法。 我試過如下。檢查字符串是否包含子字符串,而不使用java預定義的方法

public void checkAvailability() 
{ 
    len=st.length(); 
    for(int i=0;i<len;i++) 
    { 
     for(int j=0;j<substr.length();j++) 
     { 
      if(st.charAt(i)==substr.charAt(j)) 
      { 
       if(j!=substr.length()-1 && i!=st.length()-1) 
       { 
        if(st.charAt(i+1)==substr.charAt(j+1)) 
        { 
         available=true; 
         //j++; 
         count++; 
        } 
       } 
      } 
     } 
    } 
    if(available) 
    { 
     System.out.println("The character is available " + count + " times"); 
    } 
    else 
    { 
     System.out.println("The character is not availabe"); 
    } 
} 

但它沒有給出正確的答案。有人可以幫忙嗎?

預先感謝您...

+0

答案以何種方式不正確?你能舉幾個例子嗎? – Keppil 2013-05-11 16:35:49

+0

輸入字符串:QWERTYQWERTYQWFDS 進入子字符串:QWE 字符可用3.0倍 這是放出來了上面給出的投入。 – Dini88 2013-05-11 16:39:09

回答

2

有代碼中的一些錯誤 - 我將描述一個算法,而無需編寫代碼,以避免破壞你的學習鍛鍊:

  • 的外環需要從0到去st.length()-substr.length()
  • 內環需要檢查st.charAt(i+j)substr.charAt(j)
  • 內環需要爲你找到一個匹配儘快停止;設置一個不匹配標誌,並打破
  • 如果內循環完成而沒有發現不匹配,則i是第一個匹配的位置。

請注意,這是最直接的算法。當st很長時,它表現不佳,並且substr有很多「誤報」。通常,您可以做得比這更好,例如,通過使用KMP algorithm

+0

public void checkAvailability() { \t len = st.length(); \t對(INT I = 0; I Dini88 2013-05-11 16:46:46

+0

那是你的方式告訴?但我沒有得到解決方案。 – Dini88 2013-05-11 16:48:56

+1

@ Dini88這樣比較好,但不是很對:第一個「if」應該檢查不等式「!=」,並且不應該有第二個「if」。看看:[鏈接](http://ideone.com/T9iSFm)。 – dasblinkenlight 2013-05-11 16:56:16

相關問題