2016-08-06 66 views
-1

我被困在解決這個問題。下面是我想到的最多的:Java Wrtie an isSubstring方法

問題:編寫布爾方法public static boolean isSubstring(String x,String y)以兩個字符串x和y作爲參數並返回true,如果只有一個字符串x是a字符串y的子字符串。字符串x是字符串y的子字符串當且僅當x中的所有字符都在y中連續出現。對於這個問題,您可以使用的唯一String方法是length()和charAt()。如果您使用任何其他字符串方法,您將不會收到此問題的功勞。

import java.util.Scanner; 

public class question { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.print("Enter String 1:"); 
     String String1 = input.nextLine(); 
     System.out.print("Enter String 2:"); 
     String String2 = input.nextLine(); 

     if(isSubstring(String1,String2)){ 
      System.out.println("True"); 
     } else { 
      System.out.println("False"); 
     } 
    } 
    public static boolean isSubstring(String x, String y) { 

     int count = 0, xIndex = 0, yIndex = 0; 
     boolean sub = false; 

     while(!sub && yIndex < y.length()){ 
     if(y.charAt(yIndex) == x.charAt(yIndex)){ 
      xIndex++; 
      count++; 
     } else { 
      if(count == x.length()){ 
       sub = true; 
      } 
     } 
     yIndex++; 
     } 
     return sub; 
    } 
} 
+1

題外話:類以大寫字母開頭。 – ManoDestra

+1

首先寫下你如何解決問題的方法。 –

+1

@Reis - 具體是什麼問題?在某些情況下,發佈的代碼是否工作,或者是否存在錯誤,或者發佈了錯誤的答案?請給我們一個具體的問題...... – Hatley

回答

0

你沒有防止xIndex溢出。猜猜如果substring y放在x的末尾,它就會失敗。此外介意的情況下,其中x小於x的長度,可以只返回false然後作爲一個優化,如果你在方法

0
public class Task_1_9 { 
    public static boolean isSubstring(String s1, String s2){ 
     if (s1.length() != s2.length()) return false; 
     int count = 0; 
     int i = 0; 
     int j = 0; 
     String s3 = s2 + s2; 
     while (j < s3.length() && count < s1.length()){ 
      if (s1.charAt(i) == s3.charAt(j)){ 
       count++; 
       i++; 
      } else { 
       count = 0; 
      } 
      j++; 
     } 
     return count == s1.length() ? true : false; 
    } 

    public static void main(String[] args) { 
     System.out.println(isSubstring("waterbottle","erbottlewat")); 
    } 
} 
1

此檢查的開始首先在本地變量保持長度如果S2 S1的子字符串。

public static boolean isSubstring(String s1, String s2){ 
    if(s1.length()<s2.length()) return false; 
    if(s1.length()==s2.length()) return s1.equals(s2); 
    for(int i=0;i<=s1.length()-s2.length();i++){ 
     if(s1.charAt(i)==s2.charAt(0)){ 
      int matchLength=1; 
      for(int j=1;j<s2.length();j++){ 
       if(s1.charAt(i+j)!=s2.charAt(j)){ 
        break; 
       } 
       matchLength++; 
      } 
      if(matchLength==s2.length()) return true; 
     } 
    } 
    return false; 
}