Палиндром наивысшего значения - PullRequest
0 голосов
/ 20 сентября 2019

Учитывая строку, представляющую начальный номер и максимально допустимое количество изменений, создайте наибольшую возможную палиндромную строку цифр или строку -1, если невозможно создать палиндром под ограничениями.

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

static String highestValuePalindrome(String s, int n, int k) {

        for(int i =0 ; i < n ; i++){
            char[] ch =s.toCharArray();   

            if(n==1)
            return s ; 
            else if ((ch[i] != ch[n-i-1]) && (k != 0) ){
                ch[i] = ch[n-i-1] = 9 ; 
                k--;
            }
        }
        String str = new String(ch);
return str ; 
    }

Формат вывода

Печать одной строки с наибольшим числом, которое можно изменить, изменив не более, чем цифры.Если это невозможно, выведите -1. ​​

Пример ввода n = 4, k = 1 3943 Пример выборки 3993

Пример ввода n = 6, k = 3 092282 Пример вывода 992299

Пример ввода n = 4, k = 1 0011 Пример ввода -1

1 Ответ

0 голосов
/ 20 сентября 2019

Прежде всего, нет необходимости передавать n в качестве параметра, потому что это просто длина строки.Во-вторых, это не полная программа.Я внес много изменений в данный код.

public class largestPalindorme {
public static void main(String[] args) {
    System.out.println(highestValuePalindrome("0011", 1));
}
static String highestValuePalindrome(String s, int k) {
    char[] ch = s.toCharArray();
    int n = s.length(); // which is same as n which you passed as parameter
    int minChangesRequired = MinumumChangesNeeded(s);
    //if the changes required to make the given string a palindrome is less then k then only it will go inside or it will return -1
    if (k >= minChangesRequired) {
        int diff = 0;
        if (k > minChangesRequired) {
            diff = k - minChangesRequired;
            for (int l = 0; l < diff; l++) {
                ch[l] = '9';
                ch[n - l - 1] = '9';
            }
        }
        for (int i = diff; i < n - diff / 2; i++) {
            if (ch[i] != ch[n - i - 1]) {
                //if checks which number is greater
                int greater = Integer.parseInt(String.valueOf(ch[i])) > Integer.parseInt(String.valueOf(ch[n - i - 1])) ? Integer.parseInt(String.valueOf(ch[i])) : Integer.parseInt(String.valueOf(ch[n - i - 1]));
                //replaces the smaller number from the greater number.
                if (Integer.parseInt(String.valueOf(ch[i])) != greater) {
                    ch[i] = ch[n - i - 1];
                } else {
                    ch[n - i - 1] = ch[i];
                }
            }
        }
        String str = new String(ch);
        return str;
    }
    return "-1";
}
//this function returns the minimum changes we need to do to make it a palindrome.
public static int MinumumChangesNeeded(String s) {
    int count = 0;
    char[] ch = s.toCharArray();
    int n = s.length();
    for (int i = 0; i < n / 2; i++) {
        if (ch[i] != ch[n - i - 1]) {
            count++;
        }
    }
    return count;}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...