проверить, можем ли мы разбить строку на две половины, и обе половины равны? - PullRequest
0 голосов
/ 02 марта 2019

Я работаю над проектом, в котором мне нужно добавить метод ниже в SampleQueue классе -.

public static boolean isValid(String s)

Метод выше должен сделать это - он будет принимать строку как входной параметр,Рассмотрим строки, которые можно разбить так, чтобы их первая половина совпадала со второй (игнорируя пробелы, знаки препинания и регистр).Например, строка «treetree» может быть разбита на «дерево» и «дерево».Другой пример - «мир, мир».После игнорирования пробелов и запятой две половины строки совпадают.Однако строка «kattan» имеет неравные половины, как и строка «abcab».

В основном мой метод должен возвращать значение true, если строка имеет свойство выше, и значение false в противном случае.Для реализации метода нам нужно использовать только методы в классе SampleQueue, как показано ниже:

public class SampleQueue<T> {
  private T[] queue;
  private int frontIndex;
  private int backIndex;
  private static final int DEFAULT_INITIAL_CAPACITY = 200;

  public SampleQueue() {
    this(DEFAULT_INITIAL_CAPACITY);
  }

  public SampleQueue(int initialCapacity) {
    T[] tempQueue = (T[]) new Object[initialCapacity + 1];
    queue = tempQueue;
    frontIndex = 0;
    backIndex = initialCapacity;
  }

  public void enqueue(T newEntry) {
    ensureCapacity();
    backIndex = (backIndex + 1) % queue.length;
    queue[backIndex] = newEntry;
  }

  public T getFront() {
    T front = null;
    if (!isEmpty())
      front = queue[frontIndex];

    return front;
  }

  public T dequeue() {
    // some stuff here
  }

  private void ensureCapacity() {
    // some stuff here
  }

  public boolean isEmpty() {
    // some stuff here
  }

  public void clear() {
    // some stuff here
  }


  public static boolean isValid(String s) {
    if (s == null || s.isEmpty()) {
      return false;
    }
    SampleQueue<Character> myQueue = new SampleQueue<>();
    for (char ch : s.trim().toLowerCase().toCharArray()) {
      if ((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9'))
        myQueue.enqueue(ch);
    }
    // all is this right way to check the length?
    if (myQueue.queue.length % 2 == 1) {
      return false;
    }
    // now I am confuse here?
  }
}

Я реализовал несколько вещей в основе метода isValid на основе этой логики, которую придумал, но я запуталсяЧто делать, чтобы длина регистра была четной?

Поставить в очередь все символы строки - за исключением пробелов и знаков пунктуации - по одному за раз.Пусть длина очереди будет n.Если n нечетно, вернуть false.Если n четно, то что мне делать?

1 Ответ

0 голосов
/ 02 марта 2019

Это кажется слишком сложным;используйте регулярное выражение , чтобы удалить все, кроме буквы, а затем проверьте, равны ли две половины String.Мол,

public static boolean isValid(String s) {
    String t = s.replaceAll("[^A-Za-z]", "");
    return t.substring(0, t.length() / 2).equals(t.substring(t.length() / 2, t.length()));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...