zoukankan      html  css  js  c++  java
  • [校招] 英文句子单词反转

    描述

    原地翻转句子中单词的顺序,但单词内字符的顺序不变。要求:空间复杂度O(1),时间复杂度O(n)。

    输入

    英文句子中单词以一个空格符隔开。为简单起见,标点符号和普通字母一样处理。
    

    输出

    翻转之后的英文句子,单词内字符的顺序不变,以一个空格隔开
    

    输入例子

    I am a student.
    

    输出例子

    student. a am I
    

    思路:

    因为要求空间复杂度为O(1),所以用栈压入弹出肯定是做不了了,故采用全串反转,再单词反转的方法。

    即首先把整个串反转,然后遍历,遇到空格再进行反转,用k控制单词左端。

    代码(Java 描述):

    import java.util.Scanner;
    
    public class SentenceInversion {
    
        public static char[] str;
        // l,r 为反转左右端
        public static void reve(int l,int r){
            for(int i=l;i<r/2;i++){
                //异或交换也可
                char temp;
                temp = str[i];
                str[i] = str[r-i-1];
                str[r-i-1] = temp;
            }
        }
    
        public static void main(String[] args) {
            str = new Scanner(System.in).nextLine().toCharArray();
            //先全串反转
            reve(0,str.length);
            for(int i=0,k=0;i<str.length;i++){
                //遇到空格再单词反转
                if(str[i] == ' '){
                    reve(k,i+k);
                    k = i+1;
                }
                //串尾特殊判断
                if(i == str.length-1){
                    reve(k,i+k+1);
                }
            }
            System.out.println(str);
        }
    }
    
  • 相关阅读:
    【angularJS】启动(bootstrap)机制
    【angularJS】定义模块angular.module
    【angularJS】简介
    .NET AutoMapper学习记录
    WebAPI学习
    【MongoDB】在C#中使用
    RabbitMQ介绍及windows下安装使用
    【MongoDB】初识
    php命名空间(nameSpace)的使用详解
    魔术方法
  • 原文地址:https://www.cnblogs.com/eisuto/p/13698860.html
Copyright © 2011-2022 走看看