首页 > 其他分享 >【剑指Offer】44、反转单词序列

【剑指Offer】44、反转单词序列

时间:2023-07-01 23:23:19浏览次数:34  
标签:顺序 Offer 反转 44 am 单词 student 翻转

【剑指Offer】44、反转单词序列

题目描述:

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

解题思路:

本题相对比较简单,但是在面试中经常遇到,流传甚广。其主要思路也简洁明了,主要分为以下两步:

第一步:反转整个序列中所有的字符,这时会发现不但反转了单词的顺序,单词中的字母顺序也被反转,因此需要第二步的调整。

第二步:以空格为分隔,依次反转每个单词,即让每个单词会到原来的正常顺序。

举例:

以字符串“student. a am I”为例:整体反转后变为:"I ma a ,tenduts",然后再反转每个单词,可以得到最后结果:“I am a student.”。

编程实现(Java):

public class Solution {
    //先翻转整个字符串,再逐一翻转每个单词
    public String ReverseSentence(String str) {
        if(str==null)
            return null;
        char[] strArr=str.toCharArray();
        reverseStr(strArr,0,strArr.length-1); //翻转整个字符串
        int begin=0;
        for(int i=0;i<strArr.length;i++){
            if(strArr[i]==' '){
                reverseStr(strArr,begin,i-1);
                begin=i+1;
            }
        }
        reverseStr(strArr,begin,strArr.length-1); //最后一个单词后没有空格
        return new String(strArr);
    }
    
    public void reverseStr(char[] array,int begin,int end){ //反转字符串,前后指针
        for(;begin<end;begin++,end--){
            char c=array[begin];
            array[begin]=array[end];
            array[end]=c;
        }
    }
}

标签:顺序,Offer,反转,44,am,单词,student,翻转
From: https://www.cnblogs.com/bujidao1128/p/17520153.html

相关文章

  • Android面经:小厂被diss到自闭,“试水”大厂竟收3份offer
    写在最前面:有时候某人的放弃,将会成就你更好的选择!刚开始面试的时候我真的是处处碰壁,面一家挂一家,面完之后怀疑自我,是不是自己真的太菜了找不到工作,还是真的是像网上所焦虑的那样,Android开发真的是要凉了?这次跳槽经历让我明白,工作本身就是双向选择,一家不行再换一家,总有合适的,千万不......
  • 【雕爷学编程】Arduino动手做(144)---KA2284 电平模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • 【剑指Offer】27、字符串的排列
    【剑指Offer】27、字符串的排列题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。解......
  • 【剑指Offer】2、替换空格
    【剑指Offer】2、替换空格题目描述:  请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为WeAreHappy.则经过替换之后的字符串为We%20Are%20Happy。解题思路:  对于这个题目,我们首先想到原来的一个空格替换为三个字符,字符串长度会增加,因此,存在以下两种......
  • 剑指 Offer 58 - I. 翻转单词顺序
    输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"Iamastudent.",则输出"student.aamI"。示例1:输入:"theskyisblue"输出: "blueisskythe"示例2:输入:" helloworld! "输出: "worl......
  • CSS英文单词换行
    问题描述有的时候我们需要在页面上展示英文单词,但是有时单词的字母被独立出来形成不了一个整体。比如:使用element-ui中的el-table解决办法:使用css的一个属性,来根据单词进行换行。:deep(.el-table.cell){word-break:break-word;}......
  • 解决:远程连接mysql:报异常,1044 - Access denied for user ‘root‘@‘%‘ to database
    Navicat报错:使用Navicat远程连接,Docker中的mysql5.6时报异常,:1044-Accessdeniedforuser'root'@'%'todatabase'xxx'问题原因:(1)根本原因:远程连接用户权限不足!(2)直接原因:应该是创建远程连接用户‘root@%’时,没有添加访问数据库的权限。解决办法:#这里为刚才创建的root@......
  • P8544 禁断之门对面,是此世还是彼世
    被蓝宝薄纱。题意复制的给定一场长度为\(n\)的正整数序列\(a\)和一个长度为\(m\)的正整数序列\(b\)。现在蓝根据序列\(a\)与序列\(b\)构造了一个\(n\)行\(m\)列的正整数矩阵\(A\)满足\(A_{i,j}=a_ib_j\),你需要构造\(n+1\)行\(t\)列的正整数矩阵\(B\)......
  • 剑指 Offer 27. 二叉树的镜像
    请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入:4  /  2  7 /\ /1 36 9镜像输出:4  /  7  2 /\ /9 63  1示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]来源:力扣(LeetCode)链接:https://lee......
  • 【剑指Offer】51、构建乘积数组
    【剑指Offer】51、构建乘积数组题目描述:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1]。  其中B中的元素B[i]=A[0]*A[1]...*A[i-1]*A[i+1]...*A[n-1]。不能使用除法。解题思路:首先,仔细理解题意,B[i]是A数组所有元素的乘积,但是没有A[i]项,如果没有不能使......