Java实现字符数组单词反转

来源:互联网 发布:棉被芯什么牌子好 知乎 编辑:程序博客网 时间:2024/05/21 17:01

今天笔试时遇到一个题目:

       有一段英文用空格隔开,不包含标点符号,如: what are you doing   需输出格式如下doing you are what。要求只能借助定长的内存。

       答题的时候一时不知从何下手,然后就用到了 StringBuilder和Stack 虽然能实现输出结果但是却用到了不定长度的内存空间,自然不符合要求。于是下来百度了一番,发现大体思路为:

       1  全部倒排:如 what are you doing  => gniod uoy era tahw

       2 按照空格将每个单词执行步骤1   即: gniod => doing    uoy => you   era => are  tahw=>what

       知道思路之后具体代码如下:

       public class ReverseString {
public void reverseString( char[] input , int first , int last ){   //对字符数组input 指定范围内的元素 倒排序
char _temp = ' ' ;
while( first < last ){
_temp = input[first] ;
input[first] = input[last] ;
input[last] = _temp ;
first++ ;
last-- ;
}
}

public void reverAllWord( char[] input ){   //对字符数组input按照空格进行分割成各个段,然后倒排序
int first = 0 ; 
int last = 0 ;
while( last < input.length ){
if( input[last] == ' '){
if( input[last-1] != ' ' ){  //此处拼除掉多个连续的空格的情况
reverseString(input , first , last - 1 );
}
first = last + 1 ;
}
last ++ ;
}
if( first < last -1 ){ //此处保证 倒数第一个空格之后的字符进行倒排序
reverseString(input , first , last - 1 );
}
}

public static void main(String[] args) {
ReverseString _rs = new ReverseString() ;
char[] input = new char[]{'w','h','a','t',' ',' ',' ','a','r','e',' ','y','o','u',' ','d','o','i','n','g'};
_rs.reverseString(input, 0, input.length-1);
for( char _char : input ){
System.out.print(_char);
}
_rs.reverAllWord(input);
System.out.println(" ");
for( char _char : input ){
System.out.print(_char);
}
}



0 0