剑指offer (42) 单词翻转

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符顺序不变

题解分析:

两次翻转:

第一次翻转整个句子

第二次解析出每个单词并将单词翻转

void reverse(char* first, char* last)
{
    assert(first != NULL && last != NULL);
    while (first < last) {
        char temp = *first;
        *first = *last;
        *last = temp;
        ++first;
        --last;
    }
}

void reverseTotal(char* str)
{
    assert(str != NULL);

    char* first = str;
    char* last  = str;
    while (*last != ‘\0‘) {
        ++last;
    }
    --last;
    reverse(first, last);

    first = str;
    last = str;

   // 以空格为分隔符解析单词
    while (*first != ‘\0‘) {
        if (*first == ‘ ‘) {
            ++first;
            ++last;
        } else if (*last == ‘ ‘ || *last == ‘\0‘) {
            reverse(first, --last);
            ++last;
            first = last;
        } else {
            ++last;
        }
    }
}

剑指offer (42) 单词翻转

时间: 2024-10-11 03:25:19

剑指offer (42) 单词翻转的相关文章

剑指offer 42.和为S的两个数字

剑指offer 42.和为S的两个数字 题目 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 思路 同样是滑动窗口题目,设置左右两个游标,然后计算和,若和小,那么左侧游标增加,区间和大,右侧游标减小,保存结果的时候要比较一下更符合条件的数. 代码 public ArrayList<Integer> FindNumbersWithSum(int[]

剑指offer之【翻转单词顺序列】

题目: 翻转单词顺序列 链接: https://www.nowcoder.com/practice/3194a4f4cf814f63919d0790578d51f3?tpId=13&tqId=11197&rp=4&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴

剑指Offer对答如流系列 - 翻转字符串

面试题58:翻转字符串 问题描述 问题(1) 翻转单词顺序 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理. 例如输入字符串"I am a student. ",则输出"student. a am I". 问题(2)左旋转字符串 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作的功能. 比如输入字符串"abcdefg"和数字2,该函数将返回左

剑指Offer——反转单词顺序(Java)

问题描述:输入一个英文句子,反转句子中的单词的顺序,但单词内字符的顺序不变:(为简单起见,标点符号与普通字符当做一样处理) 示例       :输入:"I am a student." 输出: ".student a am I" 策略      :策略是先反转整个字符串,在根据空格划分单词,然后依次反转每个单词 代码      : public class ReverseString { /*****反转单个字符串函数****/ public char[] reve

【剑指offer】翻转单词顺序

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27372033 题目描写叙述: JOBDU近期来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看.但却读不懂它的意思.比如,"student. a am I".后来才意识到.这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.". Cat对一一

剑指Offer——翻转单词顺序列

题目描述: 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 分析: 同上一题的解法.剑指Offer--左旋转字符串. 代码: 1 class Solut

【Java】 剑指offer(58-1) 翻转单词顺序

  本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a student. ",则输出"student. a am I". 思路 一开始自己觉得要用split()方法,但这要开辟新的数组,占内存空间,不行. 首先实现翻转整个句子:只需要在首尾两端各放置一个

【剑指offer】Q16:翻转链表

def reverse(head): if head == None or head.next == None: return head psuhead = ListNode(-1) while head: nexthead = head.next head.next = psuhead.next psuhead.next = head head = nexthead head = psuhead.next del psuhead return head [剑指offer]Q16:翻转链表

剑指 Offer 题目汇总索引

剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格               时间:O(n) 空间:O(1) 5.从尾到头打印链表 6. 重建二叉树          && 二叉树的各种遍历(BFS,DFS,DLR,LDR,LRD) 7.用两个栈实现队列 8.旋转数组的最小数字 9.斐波那契数列第 n 项        时间O(lgn) 10.一个整数的二进制表示中