Проверьте, содержат ли две строки одинаковые символы в одинаковом порядке - PullRequest
0 голосов
/ 21 апреля 2020

'' Учитывая две строки s и t, напишите функцию, чтобы проверить, содержит ли s все символы t (в том же порядке, что и в строке t). Верните true или false. рекурсия не нужна. Вот фрагмент кода, который я пишу в java. проблема для ввода: string1 = "st3h5irteuyarh!" и string2 = "shrey" должно возвращать TRUE, но возвращает FALSE. Почему это так? ''

public class Solution {
    public static String getString(char x)  
    { 
       String s = String.valueOf(x); 
       return s; 
    }  

    public static boolean checkSequence(String s1, String s2) 
    {

        String a = getString(s1.charAt(0));  
        String b = getString(s2.charAt(0)); 

        for (int i = 1; i < s1.length(); i++) 
            if (s1.charAt(i) != s1.charAt(i - 1))  
            { 
                a += getString(s1.charAt(i)); 
            } 

        for (int i = 1; i < s2.length(); i++) 
            if (s2.charAt(i) != s2.charAt(i - 1))  
            { 
                b += getString(s2.charAt(i)); 
            } 

        if (!a.equals(b)) 
            return false; 

        return true; 

    }
}

Ответы [ 4 ]

1 голос
/ 21 апреля 2020

Это решение:

public class Solution {
    public static String getString(char x)  
    {

        String s = String.valueOf(x); 
        return s; 
    }

    public static boolean checkSequence(String s1, String s2) 
    {

        String a = getString(s1.charAt(0));  
        String b = getString(s2.charAt(0)); 

        int count = 0;

        for (int i = 0; i < s1.length(); i++)
        {
            if (s1.charAt(i) == s2.charAt(count))  
            { 
                count++;
            } 
            if (count == s2.length())
                return true;
        }

        return false; 
    }
} 
  • Каждый символ String s1 сравнивается с символом String s2 в позиции количество ,
  • , если они совпадают число увеличивается: count++;
  • Если число имеет длину Строка 2 все символы совпадают и true возвращается.
0 голосов
/ 21 апреля 2020

Ваш подход к решению этой проблемы может быть примерно таким:

  1. Найдите строку меньшего размера.
  2. Инициализировать указатель на начальную позицию строки меньшего размера.
  3. Перебирать строку большего размера в течение l oop и продолжать проверять, совпадает ли символ.
  4. При увеличении совпадения счетчик меньшего указателя.
  5. при повторении продолжайте проверять, достиг ли меньший указатель конца или нет. Если да, тогда верните true.

Примерно так:

public static boolean checkSequence(String s1, String s2)
{
    String smallerString = s1.length()<=s2.length() ? s1 : s2;
    String largerString = smallerString.equals(s2) ? s1 : s2;
    int smallerStringPointer=0;
    for(int i=0;i<largerString.length();i++){
        if(smallerString.charAt(smallerStringPointer) == largerString.charAt(i)){
            smallerStringPointer++;
        }
        if(smallerStringPointer == smallerString.length()){
            return true;
        }
    }
    return false;
}
0 голосов
/ 21 апреля 2020

есть две проблемы, которые я вижу в этом коде

1 for (int i = 1; i < s1.length(); i++) вы начинаете с индекса 1, но строковые индексы начинаются с 0

2 if (s1.charAt(i) != s1.charAt(i - 1)) здесь вы сравниваете символы одинаковых строк s1 в других l oop, также это так

, пожалуйста, сначала исправьте их, затем спросите еще раз

0 голосов
/ 21 апреля 2020

это может быть то, что вы ищете

public class Solution {
  public static boolean checkSequence(String s1, String s2) {
    for(char c : s2.toCharArray()) {
      if(!s1.contains(c+"")) {
        return false;
      }
      int pos = s1.indexOf(c);
      s1 = s1.substring(pos);
    }
    return true;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...