博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer系列之四十四:翻转单词顺序
阅读量:6198 次
发布时间:2019-06-21

本文共 1525 字,大约阅读时间需要 5 分钟。

题目描述

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

可以发现,要对一个句子进行翻转,可以先对整个句子进行翻转,之后再对每个单词进行翻转。而不论是返回句子还是翻转单词,都是对一个字符串进行翻转,所以可以实现一个翻转函数,对从start到end位置的字符进行翻转,直到start大于end的值。所以实现句子翻转的代码如下(已被牛客AC):

package com.rhwayfun.offer;public class RotateSentence {    public String ReverseSentence(String str) {        if(str == null) return str;        //先翻转整个句子        char[] cs = str.toCharArray();        int begin = 0;        int end = cs.length -1;        reverse(cs, begin, end);        begin = end = 0;        //再翻转每个单词        while(begin < cs.length){            if(cs[begin] == ' '){
//如果第一个位置就遇到空格说明不是一个有效的单词 begin++; end++; }else if(end == cs.length || cs[end] == ' '){ //当end遇到空格,说明一个单词的结束,翻转这个单词 reverse(cs, begin, --end); begin = ++end; }else{ //end没有遇到空格 end++; } } return new String(cs); } private void reverse(char[] str, int begin,int end){ while(begin <= end){ char temp = str[begin]; str[begin] = str[end]; str[end] = temp; begin++; end--; } } public static void main(String[] args) { String str = "hello world"; RotateSentence r = new RotateSentence(); String s = r.ReverseSentence(str); System.out.println(s); }}

转载地址:http://ffica.baihongyu.com/

你可能感兴趣的文章
微信小程序之缓存——不同页面传递数据
查看>>
游戏核心算法原理
查看>>
6.15 分解IP地址
查看>>
shell脚本执行的三种方式
查看>>
bootstrapvalidator 验证。 整理的一些类型
查看>>
linux 正则表达式和通配符
查看>>
hbase基本命令
查看>>
scrapy发送POST请求
查看>>
LinqPad与Entity Framework的使用
查看>>
数据概述
查看>>
正则表达式 注释
查看>>
LeetCode – Refresh – 3sum
查看>>
Delphi 调用外部程序并等待其运行结束
查看>>
Python常用模块之os模块
查看>>
专题二经典问题解析_13
查看>>
Redhat下如何搭建NFS
查看>>
POJ 3128 Leonardo's Notebook (置换)
查看>>
解决mysql中只能通过localhost访问不能通过ip访问的问题
查看>>
索引的简单操作
查看>>
本周学习小结(15/04 - 21/04)
查看>>