题目
给定一个字符串,逐个翻转字符串中的每个单词。
样例
输入:”abc d”
输出:”d abc”
说明
单词的构成:无空格字母构成一个单词
输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括
如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个
思路
根据说明首先需要忽略前导或者尾随空格,然后通过数组形式保存遍历字符串所得到的未遇到空格的子串。对于多个空格形式使用标识符进行判断,当遇到第一个空格后忽略往后所有空格。在这个算法中存在一个问题,那就是最后子串无法添加至数组中,我通过字符串最后索引进行判断,将最后子串添加入数组中。然后从后之前完成字符串翻转。
public class Solution {
/*
* @param s: A string
* @return: A string
*/
public String reverseWords(String s) {
// write your code here
String reversString="";
String temp="";
String[] stringList=new String[s.length()];
int listLength=0;
boolean isHaveSpaece=false;
//将字符串遍历以空格进行拆解进入数组
for(int i=0;i<s.length();i++)
{
//前导或者尾随空格不做判断,也不做添加
if((i==0 || i==s.length()-1) && (s.charAt(i)+"").equals(" "))
{
continue;
}
//当前char不为空格时添加
if(!(s.charAt(i)+"").equals(" "))
{
isHaveSpaece=false;
temp=temp+s.charAt(i);
}
if( i==s.length()-1 || (s.charAt(i)+"").equals(" ") ){
if(! isHaveSpaece )
{
stringList[listLength++]=temp;
}
isHaveSpaece=true;
temp="";
}
}
for(int i=listLength-1;i>=0;i--)
{
reversString=reversString!=""?reversString+" "+stringList[i]:reversString+stringList[i];
}
return reversString;
}
}