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);
        }
    }
    
  • 相关阅读:
    Instruments之Core Animation学习
    Instruments之Allocations
    Instruments之Activity Monitor使用入门
    Instruments之相关介绍(一)
    快速理解Java中的五种单例模式
    iOS单例详解
    eclipse设置代码自动提示
    iOS-静态库,动态库,framework,bundle浅析(四)
    8.0docker的客户端和守护进程
    1.0 docker介绍
  • 原文地址:https://www.cnblogs.com/eisuto/p/13698860.html
Copyright © 2011-2022 走看看