Я должен проверить строку pallindrome. Я получаю неправильный ответ, когда я ввожу строку, имеющую цифры c. Например, "0P" - PullRequest
2 голосов
/ 15 марта 2020

Я должен игнорировать все специальные символы в строке. Я создал новую строку s1, включающую только буквенно-цифровые символы. Затем создал обратную строку s2, а затем проверил, являются ли они паллиндромом или нет.

class Solution 
{
    public boolean isPalindrome(String s)
    {
        char c,ch;
        String s1="";
        String s2="";
        s=s.trim();
        s=s.toLowerCase();
        if(s=="")
            return true;
        for(int i=0;i<s.length();i++)
        {
            c=s.charAt(i);
            if(c>=97&&c<=122||c>=0&&c<=9)
                s1=s1+c;
        }
        for(int j=s1.length()-1;j>=0;j--)
        {
            ch=s1.charAt(j);
            s2=s2+ch;
        }
    if(s1.equals(s2))
        return true;
    else
        return false;  
    }
}

Ответы [ 3 ]

1 голос
/ 15 марта 2020
String str = "@ Test!#@!#!@92432432";
String tmp = str.replaceAll("[^a-zA-Z0-9]", "");
System.out.println(tmp);  

Печать

Test92432432

Ссылка: Как игнорировать специальные символы и пробелы в строке?

0 голосов
/ 15 марта 2020

Вы можете использовать что-то вроде этого:

public static boolean isPalindrome(String s)
{
    int i = 0;
    int j = s.length() - 1; 
    while (i < j) { 
        if (s.charAt(i) != s.charAt(j)) 
            return false; 
        i++; 
        j--; 
    }
    return true; 
}
0 голосов
/ 15 марта 2020

Как я понимаю, вы используете c>=0&&c<=9 для проверки c для di git. Это неправильно, потому что '0' == 48 и '9' == 57, и вы должны использовать c> = 48 && c <= 57 </p>


И я хочу дать вам несколько комментариев о вашем коде :

  1. Строка - это неизменяемый объект в java, и много конкатенации строк - очень плохая практика. Пожалуйста, используйте StringBuilder.
  2. Вы можете использовать s.isEmpty() вместо s==""
  3. Character класс имеет stati c методы isDigit и isAlphabetic, в то время как c являются проверками char для ди git или алфавит c
  4. Если вы будете использовать StringBuilder, вы можете инвертировать строку просто stringBuilder.reverse() методом
  5. В конце метода вы вернете true, если s1.equals(s2) и ложь - чрезмерно. Вы можете просто использовать return s1.equals(s2);
  6. И вы можете перебирать строку с for (char c : s.toCharArray()) цикл

И окончательный код будет

public static boolean isPalindrome(String s)
{
    s=s.trim();
    s=s.toLowerCase();

    if(s.isEmpty())
        return true;

    StringBuilder sanitizedString = new StringBuilder();
    for (char c : s.toCharArray()) {
        if(Character.isAlphabetic(c) || Character.isDigit(c))
            sanitizedString.append(c);
     }

    String s1 = sanitizedString.toString();
    String s2 = sanitizedString.reverse().toString();

    return s1.equals(s2)
}

И вы можно использовать регулярное выражение из ответа @RR_IL для избежания цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...