给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
输入:"Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"
首先附上自己的愚蠢办法,先把它化为字符数组,然后遍历寻找空格,并设置一个标记符,如果没有空格则全部翻转,如果有大于一个空格的出现就分开翻转,用一个标记索引记录每个单词起始位置,遍历到空格前,这一段进行翻转。代码如下:
class Solution {
public String reverseWords(String s) {
char[] a=s.toCharArray();
int j=0,q=a.length-1,flag=0;
for(int i = 0;i<a.length-1;i++){
if(a[i+1]==' '){
flag++;
reverse(a,j,i);
j=i+2;
}
}
for(int w = a.length-1;w>0;w--){
if(a[w-1]==' '){
reverse(a,w,q);
break;
}
}
if(flag==0){
reverse(a,0,q);
}
return String.valueOf(a);
}
public void reverse(char[] s,int left,int right){
char tmp;
while(left<right){
tmp=s[left];
s[left]=s[right];
s[right]=tmp;
left++;
right--;
}
}
}
因为我对于java基础已经好久没有系统复习过,所以对字符串的应用几乎忘记了,看到大佬们的解题,豁然开朗,并且说明我应该去复习以下java基础了。
使用字符串操作,大概是先根据空格将其分割为字符串数组,字符串数组中每个元素使用翻转函数,并且append到StringBuilder中返回即可,代码如下:
public static String reverseWords(String s) {
StringBuilder sb = new StringBuilder();
StringBuilder sb1 = new StringBuilder();
String[] split = s.split(" ");
for (String s1 : split) {
sb1.append(s1).reverse();
sb.append(sb1.toString());
sb.append(" ");
sb1.delete( 0, sb.length());
}
return sb.toString().trim();
}
任重道远!