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);
        }
    }
    
  • 相关阅读:
    usb mass storage device
    spice
    ubuntu14.04.03 vsftpd
    MingW编译virt-viewer
    virt viewer Usbredir USB重定向
    libvirt虚拟系统如何增加usb设备
    Jquery控件jrumble
    【推荐系统实战】:C++实现基于用户的协同过滤(UserCollaborativeFilter)
    STL_算法_查找算法(binary_search、includes)
    POJ 2479 Maximum sum
  • 原文地址:https://www.cnblogs.com/eisuto/p/13698860.html
Copyright © 2011-2022 走看看