Обратные символы каждого слова в предложении

Обратные символы каждого слова в предложении. Например:

Меня зовут Алекс

изменения в

yM eman si xela

Я подумал об обычном алгоритме времени O(n), использующем два указателя, чтобы указать на любой конец слова и перевернуть его.

Но на сайте ниже

http://www.businessinsider.com/8-mind-bending-interview-questions-that-google-asks-its-engineers-2012-7?op=1

(Обратитесь к ответу на вопрос 2) лучше преобразовать его в связанный список и повторно применить обращение связанного списка для отдельного слова. Я нашел следующее решение для той же программы на Hackerearth:

http://learn.hackerearth.com/question/317/reverse-characters-of-each-word-in-a-sentence/

Это решение занимает O(n) времени и O(n) места. Предложенное мной решение занимает O(n) времени O(1) места. Чем второй лучше?

Ниже приведен код от Hackerearth:

public node stringReverseChars(node ll){
    if(ll == null || ll.next == null)
        return ll;
    node tmp = ll;
    node head = null, prev = null;
    while(tmp != null){
        while(tmp != null && tmp.data == ' '){
            if(head == null)
                head = tmp;
            prev = tmp;
            tmp = tmp.next;
        }
        if(tmp == null)
            break;
        node curr = tmp;
        while(tmp.next != null && tmp.next.data != ' '){
            tmp = tmp.next;
        }
        node np = tmp.next;
        tmp.next = null;
        node rev = reverseLL(curr);
        if(prev != null)
            prev.next = rev;
        prev = curr;
        curr.next = np;
        if(head == null)
            head = rev;
        tmp = np;
    }
    return head;
}

person user2714358    schedule 22.05.2014    source источник
comment
Вы получите лучшую реакцию, если включите код, а не ссылки.   -  person Evan Knowles    schedule 22.05.2014
comment
Вам необходимо войти/зарегистрироваться, чтобы увидеть ответ. Не будет, извини.   -  person n. 1.8e9-where's-my-share m.    schedule 22.05.2014
comment
Говорят, но есть умный способ решить эту проблему, используя нечто, называемое рекурсией. В этом случае нет никакой пользы от использования рекурсии и даже менее связанных списков, наоборот. Молоток для уничтожения мух.   -  person Yves Daoust    schedule 23.05.2014


Ответы (1)


Я довольно скептически отношусь к тому, что эти другие подходы лучше. У них хуже использование памяти ((n) по сравнению с O(1)) и хуже локальность ссылок (они используют связанные списки, а не массивы). Я не вижу ничего плохого в вашем решении; на самом деле, я думаю, что это стандартный способ сделать это.

Надеюсь это поможет!

person templatetypedef    schedule 23.05.2014