Member 13565402 Ответов: 1

Как я могу игнорировать знаки препинания, заглавные буквы и пробелы в строковом палиндроме?


Я хочу игнорировать знаки препинания, заглавные буквы и пробелы из строкового палиндрома с помощью стека, чтобы:
Например:
Ввод: Мадам, я Адам
Выход: Да Палиндром
Здесь пробелы, знаки препинания и заглавные буквы игнорируются.

Что я уже пробовал:

class Stack {
	char[] arr;
	int index;
	int size;
	Stack(int size)
	{
		this.size=size;
		index=0;
		arr=new char[size];
	}
	public boolean isFull()
	{
		return (index==size);
	}
	public boolean isEmpty()
	{
		return (index==0);
	}
	public void push(char e)
	{
		if(isFull())
			System.out.print("Stack is Full");
		arr[index]=e;
		index++;
	}
	public char pop()
	{
		if(isEmpty())
			System.out.print("Stack is Empty");
		return arr[--index];
	}
    public static void main(String[] args) {
        String inputString = "Madam, I’m Adam";
		Stack stack=new Stack(inputString.length());
		
        for (int i = 0; i < inputString.length(); i++) 
		{
            stack.push(inputString.charAt(i));
        }

        String reverseString = "";

        while (!stack.isEmpty()) 
		{
            reverseString = reverseString+stack.pop();
        }

        if (inputString.equals(reverseString))
            System.out.println("Yes Palindrome");
        else
            System.out.println("Not Palindrome");

    }
}

Maciej Los

Вы можете удалить ненужные символы. Пожалуйста смотрите: Java программа для удаления подстроки из строки

1 Ответов

Рейтинг:
1

CPallini

Я бы удалил все небуквенные символы, преобразовал все буквы в нижний (или верхний) регистр и в конечном итоге проверил симметрию.

class PalChecker
{
  public static boolean isPalindrome(String instr)
  {
    StringBuilder sb = new StringBuilder();

    for (char c : instr.toCharArray())
      if ( Character.isLetter(c) )
        sb.append(Character.toLowerCase(c));

    String str = sb.toString();

    int len = str.length();

    for (int i=0; i < len/2; i++)
      if (str.charAt(i) != str.charAt(len - 1 - i) )
        return false;

    return true;
  }

  public static void main(String args[])
  {
    String inputString = "Madam, I’m Adam";
    boolean isPal = isPalindrome(inputString);
    System.out.printf("The input string is" + (isPal ? "": " not") + " palindrome.\n");
  }
}


Maciej Los

5ed!

CPallini

Большое тебе спасибо, Мацей!

Richard Deeming

Вы всегда должны переходить в верхний регистр, чтобы избежать проблемы "турецкого I". :)

CA1308: нормализация строк в верхнем регистре[^]
(Ссылка предназначена для .NET, но эта проблема затронет и другие языки.)

Проблема по-турецки, я и почему тебя должно волновать-ты Haacked[^]