剑指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     public void Reverse(char[] str,int begin,int end){
10         if(str==null || str.length<=0) return ;
11         while(begin<=end){
12             char temp=str[begin];
13             str[begin]=str[end];
14             str[end]=temp;
15             begin++;
16             end--;
17         }
18
19     }
20
21     public String getReverseSentence(String str){
22         if(str==null || str.length()<=0) return str;
23         char[] charStr=str.toCharArray();
24         //1 先反转整个句子
25         int len=charStr.length;
26         int begin=0;
27         int end=len-1;
28         Reverse(charStr,begin,end);//.tneduts a ma I
29         begin=end=0;
30
31         //2 反转每个单词
32         while(begin<len){
33             //如果开始就是空格 则为无效字符
34             if(charStr[begin]==‘ ‘){
35                 begin++;
36                 end++;
37             }else if(end==len || charStr[end]==‘ ‘ ){//当end达到最后一位或者遇到空格,就表示一个单词的结束,就开始反转此单词
38                 Reverse(charStr,begin,--end);
39                 begin=++end;
40             }else{
41                 end++;
42             }
43         }
44         return new String(charStr);
45
46     }
47
48     public static void main(String[] args) {
49         ReverseWordsInSentence revese=new ReverseWordsInSentence();
50         String str=revese.getReverseSentence("I am a student.");
51         System.out.println(str);
52
53     }
54
55 }
时间: 2024-10-09 22:12:58

剑指offer系列47---翻转单词顺序的相关文章

剑指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系列47:堆成的二叉树

这个题的主要思路是: 用二叉树的左子树的右子树和右子树的左子树比较,再用左子树的左子树和右子树的右子树比较.(好像有点绕,但其实就是堆成的思想) 剑指offer的说法是用数的前序遍历的两个方法,前序遍历应该是:根->左->右.但是我们用另一种前序遍历:根->右->左.如果这两个序列一样就判断它是对称的. 这两个方法在实现上其实是一样的. 1 class Solution { 2 public: 3 bool isSymmetrical(TreeNode* pRoot) 4 { 5

剑指Offer系列之题11~题15

目录 11.矩形覆盖 12.二进制中1的个数 13. 数值的整数次方 14.调整数组顺序使奇数位于偶数前面 15.链表中倒数第k个结点 11.矩形覆盖 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 斐波那契数列的应用 第一次竖着放一块类比为走一步,第一次横着放两块类比为走两步 代码与上面的斐波那契数列类题目类似,此处不再赘述:剑指Offer系列之题6~题10. 12.

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

题目1361:翻转单词顺序 时间限制:2 秒内存限制:32 兆特殊判题:否提交:1935解决:572 题目描述: JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,

剑指offer系列10:合并两个排序的链表

我拿到这个题的时候举的例子是链表1:1.3.5.7和链表2:2.4.6.8.我的思路是以:1为基础,将表2的每个结点插入表1.也就是说我一次性是要给新建立的链表中加入两个元素,分别是两个原始链表的头结点.这个思路我做了半天头脑一片混乱,中间指针实在不知道怎么弄了.于是我去睡了一觉,哈哈,我大概是这个世界上最会逃避的人了…… 看了答案使用了递归的方法,其实我做的时候我有想到要用递归,但是没用的原因是我一般写代码不喜欢用递归,原因有两个,一个是递归容易死循环,一个是递归的复杂度太高.但这道题真的太适

剑指offer系列4:斐波那契数列

剑指offer第九题,这个题很古老了.第一个想到的肯定是递归,很简单. 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 class Solution { 5 public: 6 int Fibonacci(int n) { 7 if (n == 0) 8 { 9 return 0; 10 } 11 if (n==1||n==2) 12 { 13 return 1; 14 } 15 else 16 {

剑指offer系列——48.不用加减乘除做加法

Q:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. T: 1.使用进制. 两个数异或:相当于每一位相加,而不考虑进位: 两个数相与,并左移一位:相当于求得进位: 将上述两步的结果相加 首先看十进制是如何做的: 5+7=12,三步走 第一步:相加各位的值,不算进位,得到2. 第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果. 第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12. 同样我们可以用三步走的方

《剑指offer》:[42]翻转英文中单词顺序

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理. 对字符串的操作,主要问题:一定要注意字符串为NULL和访问越界的情况!再就是找'\0'. 例如输入字符串:"I love you.",经过翻转就变成:"you. love I".看出来了吗,故意的,(不论语法)呵呵! 方案一:两次翻转法.两次翻转法就是先对整个字符串进行翻转:".uoy evol I":第二次再翻转对句子中的单个单词进行

剑指offer系列31-----二叉树的下一个节点

[题目]给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回. 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 1 package com.exe7.offer; 2 3 /** 4 * [题目]给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回. 5 * 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 6 * @author WGS 7 * 8 */ 9 public class GetNextNode { 10 11 pu