zoukankan      html  css  js  c++  java
  • 剑指Offer44:翻转单词顺序列(java)

    参考牛客“魅影骑士”的解答:https://www.nowcoder.com/questionTerminal/3194a4f4cf814f63919d0790578d51f3?f=discussion

    思路分析:

    翻转单词顺序,
    先翻转单词部分,后翻转整个句子和先翻转句子再翻转单词,效果一样。
    我是先反转句子,然后翻转单词。思路是把字符串转成数组,写一个翻转方法(能够把指定区域的数组元素翻转,参数是:数组名,起始坐标,结束坐标)调用翻转方法输入参数把整个句子翻转,然后遍历数组用两个变量记录一个单词的范围坐标,调用翻转方法翻转单词。

    题目描述

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

    Java代码:

    public class Solution {
        public String ReverseSentence(String str) {
            char []res=str.toCharArray();
            int len=str.length();
            Reverse(res,0,len-1);
            int temp=0;//记录单词起始坐标
            for(int i=0;i<len;i++){
                if(res[i]==' '){//当i遇到空格时,说明一个单词结束了
                    Reverse(res,temp,i-1);
                    temp=i+1;//更新单词的起始坐标
                }
                else if(i==len-1){//当i指向最后一个字符时,说明整个句子结束了,也即最后一个单词结束了。
                    Reverse(res,temp,i);
                }
            }
            String result="";
            for(int i=0;i<len;i++){//遍历数组把数组转成字符串。
                result+=res[i];
            }
            return result;
        }
        
        public static void Reverse(char[]arr,int i,int j){ //翻转函数
            while(i<=j){
                char temp=arr[i];
                arr[i++]=arr[j];
                arr[j--]=temp;
            }
        }
    }
    
  • 相关阅读:
    比较两个树是否相同
    将一个字符串转换成一个整数
    求数组中第一个重复数字
    Redis之哨兵机制(sentinel)——配置详解及原理介绍
    ==和equals的区别
    求一个数的立方根
    检测应用版本
    【转】UITableViewCell自适应高度 UILabel自适应高度和自动换行
    iOS7中Cell高度 Label高度自适应
    MarsEdit 快速插入代码
  • 原文地址:https://www.cnblogs.com/dongmm031/p/12252469.html
Copyright © 2011-2022 走看看