题意:
给定一个字符串,如"Pig like tianhao",我们将它转化为"tianhao like Pig"
解法:
我们先将整个字符串逆序,然后找到两个变量,从左向右遍历,设置这两个变量为l和r,
图片.png
如此图所示,所以我们现在在遍历的过程中要分别设置l和r的值,然后根据条件可以知道当是第一个值或者前一个值时空格是,l就会指向这个位置;
同样的当这个是最后一个值,或者这个值的后面的位置是空格,r就指向这个位置.这样十分容易实现,
int r=-1;
int l=-1;
for(int i=0;i<arr.length;i++)
{
if(chas[i]!=' ')
{
l=i==0||chas[i-1]==' '?i:l
r=i==arr.lenght-1||chas[i+1]==' '?i:r;
}
}
通过上述的代码,就可以获取一次的需要翻转的代码,这时候我们要考虑怎么样才能够重用这样的代码
我们看如下的代码
这样我们就能够在一次的循环中,就完成题意了
///.....在for循环中
//执行完上述的代码
if(l!=-1&&r!=-1)
{
rototeStr(chas,l,r);
l=-1;
r=-1;
}
完整代码如下:
public static void f(String str)
{
if(str==null||str.length()==0)
{
return ;
}
char[] chas=str.toCharArray();
rotote(chas,0,chas.length-1);
//System.out.println(Arrays.toString(chas));
int l=-1;
int r=-1;
for(int i=0;i<chas.length;i++)
{
if(chas[i]!=' ')
{
l=i==0||chas[i-1]==' '?i:l;
r=i==chas.length-1||chas[i+1]==' '?i:r;
}
if(r!=-1&&l!=-1)
{
rotote(chas,l,r);
r=-1;
l=-1;
}
}
System.out.println(String.valueOf(chas));
}
public static void rotote(char[] chs,int left,int right)
{
while(left<right)
{
char tmp=chs[left];
chs[left]=chs[right];
chs[right]=tmp;
left++;
right--;
}
}
网友评论