2016-08-06 2 views
-1

Я застрял в решении этой проблемы. Ниже приведено то, что я придумал больше всего:Java Wrtie a isSubstring Method

Вопрос: Напишите логический метод public static boolean isSubstring (String x, String y), который принимает две строки x и y в качестве аргументов и возвращает true, если только если String x является подстрока строки y. Строка x является подстрокой строки y тогда и только тогда, когда все символы из x появляются последовательно в y. Для этой проблемы единственными методами String, которые вы можете использовать, являются length() и charAt(). Если вы используете какие-либо другие методы String, вы не получите кредит на эту проблему.

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 для переполнения. Угадайте, если подстрока y находится в конце x, она терпит неудачу. Также возражает случай, когда х имеет меньшую длину, чем х, может просто вернуть ложь, то в качестве оптимизации, если вы держите длины первой в локальном Варсе при запуске метода

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; 
}