剑指Offer41 反转单词顺序,单词字符顺序不变

 1 /*************************************************************************
 2     > File Name: 41_ReverseWords.c
 3     > Author: Juntaran
 4     > Mail: [email protected]
 5     > Created Time: 2016年09月04日 星期日 16时18分34秒
 6  ************************************************************************/
 7
 8 #include <stdio.h>
 9
10 // 反转单词
11 void ReverseWord(char* left, char* right)
12 {
13     if (left== NULL || right==NULL)
14         return;
15     while (left < right)
16     {
17         char temp = *left;
18         *left = *right;
19         *right = temp;
20
21         left ++;
22         right --;
23     }
24 }
25
26 void Reverse(char* str)
27 {
28     if (str == NULL)
29         return;
30
31     char* left = str;
32     char* right = str;
33     while (*(right+1) != ‘\0‘)
34         right++;
35
36     // 先反转整个句子
37     ReverseWord(left, right);
38
39     // 再逐步反转每个单词
40     left = str;
41     right = str;
42     while (*left != ‘\0‘)
43     {
44         if (*left == ‘ ‘)
45         {
46             left ++;
47             right++;
48         }
49         else if (*right==‘ ‘ || *right==‘\0‘)
50         {
51             ReverseWord(left, --right);
52             left = ++right;
53         }
54         else
55         {
56             right ++;
57         }
58     }
59 }
60
61 int main()
62 {
63     char str[] = "I am a student. ";
64     Reverse(str);
65
66     printf("%s\n", str);
67     return 0;
68 }
时间: 2024-08-05 21:26:46

剑指Offer41 反转单词顺序,单词字符顺序不变的相关文章

【剑指offer】Q14:调整数组顺序使奇数位于偶数前面

def isOdd(n): return n & 1 def Reorder(data, cf = isOdd): odd = 0 even = len( data ) - 1 while True: while not isOdd( data[ even ]) : even -= 1 while isOdd( data[ odd ]) : odd += 1 if odd >= even: break data[ even ], data[ odd ] = data[ odd ], data

剑指offer-最长不含重复字符的子字符串-JavaScript

题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度. 题目分析 留意最长子串和子序列不是一个概念.例如对"pwwkew"来说,最长子串是"wke","pwke"是其中一个子序列. 在不考虑时间的情况下,直接暴力法对所有的子串进行检查.复杂度是\(O(N^3)\),会超时错误. 解法 1: 滑动窗口 准备 2 个指针 i.j,i 指向窗口左边,j 指向右边.指针每次可以向前"滑动"一个位置,它

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

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

剑指offer系列47---翻转单词顺序

[题目]“I am a student.”>>>“.tneduts a ma I”.>>student. a am I 1 package com.exe9.offer; 2 3 /** 4 * [题目]“I am a student.”>>>“.tneduts a ma I”.>>student. a am I 5 * @author WGS 6 * 7 */ 8 public class ReverseWordsInSentence { 9

剑指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_面试题14_调整数组顺序使奇数位于偶数前面(函数指针用法)

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 1.一般想法,不考虑时间复杂度: 每次遍历数组,碰到一个偶数就拿出来,将后面所有数字向前挪动一位,在将该偶数放到最后. 2.利用冒泡排序的思想,两个指针,一前以后,如果前为偶数,后为奇数,就交换. 算法如下: void Reorder_array(int p[],int length) { if(NULL == p || length <= 0) return; int i

【剑指offer】八,调整数组顺序使奇数位于偶数前面

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 分析:此题在oj上练习时多加了条件,即调整后的数字之间的顺序是不变的.目前只想到一种方法,后续有其他方法再做添加.新建一个数组,扫描原数组两遍,第一遍取出原数组中所有的奇数,存入新数组中.第二遍找出所有的偶数存入新数组中.代码实现如下: 1 public class Solution { 2 public void

《剑指Offer》题目:调整数组顺序使奇数位于偶数前面

题目描述:调整数组顺序使奇数位于偶数前 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目分析: 题目的关键在于在移位以后,奇数和奇数以及偶数和偶数之间的相对位置保持不变. Java代码: public class ReOrderArray { //这种方法不能保证奇数和奇数,偶数和偶数之间的相对位置不变 public static void reOrderArray(

剑指offer(五十四)之字符流中第一个不重复的字符

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出前六个字符"google"时,第一个只出现一次的字符是"l". 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符. 思路: 使用一个HashMap来统计字符出现的次数,同时用一个ArrayList来记录输入流,每次返回第一个出现一次的字符都是在这个Array