2013-07-01 3 views
-3

Мой вопрос будет таким. Может ли кто-нибудь помочь мне распечатать транспонирование данного элемента.Как распечатать транспонирование заданной строки

Может ли кто-нибудь помочь мне распечатать транспонирование данного элемента. Я не знаю, как подать заявку на цикл для this.please помогите мне в этом был вопрос, заданный интервьюером, когда я присутствовал на интервью в компании MNC.

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

Помогите мне в этом. Спасибо заранее.

     abc 
        def 
         g 

я хочу напечатать транспонирования этого элемента, как этот

    ad 
        be 
        cfg 

Как я могу сделать это с помощью Java

+1

что вы пробовали ?? – ajduke

+3

Для этого нет встроенной функции. Разложите в 2D-массив и повторите его. –

+1

Вам нужно как минимум рассказать нам, как вы прочитали ввод. – johnchen902

ответ

2

я не обеспечивая вам код. Вот мой намек

Чтобы сделать транспонирование, вам необходимо обменять строку и столбец. Вещь входной строки как квадратная матрица 3x3, где каждая буква является элементом. Теперь сохраните ввод в массиве 2d. После сохранения транспонируйте его просто путем печати значений столбцов относительно значений строк.

    c1 c2 c3 
      r1 a  b c 
      r2 d  e f 
      r3    g 
0

Предполагая, что расстояние подсчитывает только свопы, вот идея, основанная на перестановках, которая работает в линейном времени.

Первый шаг алгоритма - гарантировать, что две строки действительно эквивалентны в их содержании символов. Это можно сделать в линейном времени, используя хеш-таблицу (или фиксированный массив, который охватывает весь алфавит). Если это не так, то s2 нельзя считать перестановкой s1, а «счет обмена» не имеет значения.

Второй шаг подсчитывает минимальное количество свопов, необходимых для преобразования s2 в s1. Это можно сделать, проверив перестановку p, соответствующую преобразованию от s1 до s2. Например, если s1 = "abcde" и s2 = "badce", то p = (2,1,4,3,5), что означает, что позиция 1 содержит элемент # 2, позиция 2 содержит элемент # 1 и т. Д. Это перестановка может быть разбита на циклы перестановок в линейном времени. Циклы в примере: (2,1) (4,3) и (5). Минимальное количество свопов - это общее количество свопов, необходимых для каждого цикла. Для цикла k требуется k-1 свопов, чтобы «исправить». Следовательно, количество свопов - это N-C, где N - длина строки, а C - количество циклов. В нашем примере результат равен 2 (swap 1,2, а затем 3,4).

Теперь, есть две проблемы здесь, и я думаю, что я слишком устал, чтобы решить их прямо сейчас :)

1) Мое решение предполагает, что ни один символ не повторяется, что это не всегда так. Для правильного подсчета подсчета обмена необходима некоторая корректировка.

2) Моя формула # MinSwaps = N-C нуждается в доказательстве ... Я не нашел его в Интернете.

0

Ну, независимо от ввода данных, вы должны сохранить его в 2D-массиве, введите String. Пустым пространствам будет присвоено пустое значение (аналогично модели StinePike; s, представьте нуль в пространстве). После этого довольно просто создать метод transpose - цикл в порядке строки столбца с использованием нулевого значения в качестве маркера для перехода к следующему столбцу.

Смежные вопросы