0 反转字符串
找好循环不变量,即while循环的循环持续条件和终止条件,嘎嘎反转
344. 反转字符串
难度简单477
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
示例 1:
输入:s = ["h","e","l","l","o"] 输出:["o","l","l","e","h"]
示例 2:
输入:s = ["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"]
提示:
1 <= s.length <= 105
- s[i] 都是 ASCII 码表中的可打印字符
力扣
class Solution
{
public void reverseString(char[] s)
{
int left=0;
int right=s.length-1;
char temp;
while(left<=right)
{
temp=s[left];
s[left]=s[right];
s[right]=temp;
left++;
right--;
}
}
}
循环不变量,循环不变量,循环不变量!!!
1:反转字符串中的单词 III
begin 存头
end 存空格前的尾
计数器i 有空格时存一下i的值
//存完判断一下,到头了交换一下就结束了
由于在String在JAVA中是写死的,比较麻烦,所以开辟声明 字符数组。
写一个语句块Swap(begin,end)
新的begin=end+1
去找end
public static String solutionString(String s)
{
int len=s.length();
char[] charr=new char[len];
int begin=0;
int end=0;
for(int i=0;i<len;i++)//i就是个计数器兼职下标的工作
{
char ch=s.charAt(i);//字符String包装类自带的charAt方法属实是让又学会一招。
if(ch==' ')//此处注意,字符和字符串在JAVA中是不同的,字符串 双引号 字符 单引号!
{
charr[i]=' ' ;//字符串数组能存空格,属实是又学会了
end=i-1;
{
int a=begin;//begin和end下面还要接着用,搞关系太复杂,直接开AB替代这两个变量。
int b=end;
char temp;
while(a<=b)//循环不变量。
{
charr[b]=s.charAt(a);
charr[a]=s.charAt(b);
a++;
b--;
}//慢慢努力,直到各自遇见,注意判断条件里的等号不能删除
}
begin=i+1;//此处注意 begin和end的处理,赋值更换顺序,end及时更新是为了交换做准备,交换完更新begin是为下一次交换做准备
}
if(i==len-1)//对最后的len-1,到头没有空格,需要单独反转存入数组中。
{
end=i;
{
int a=begin;
int b=end;
char temp;
while(a<=b)
{
charr[b]=s.charAt(a);
charr[a]=s.charAt(b);
a++;
b--;
}
}
}
}
return String.valueOf(charr);//最后这个String类里面自带的valueOf方法属实是牛了!返回一个字符串,是字符数组,省去自己拼接的操作了!
}
/*begin 存头
end 存空格前的尾
计数器i 有空格时存一下i的值
//存完判断一下,到头了交换一下就结束了
由于在String在JAVA中是写死的,比较麻烦,所以开辟声明 字符数组。
写一个语句块Swap(begin,end)
新的begin=end+1
去找end
*/
public static String solutionString(String s)
{
int len=s.length();
char[] charr=new char[len];
int begin=0;
int end=0;
for(int i=0;i<len;i++)//i就是个计数器兼职下标的工作
{
char ch=s.charAt(i);//字符String包装类自带的charAt方法属实是让又学会一招。
if(ch==' ')//此处注意,字符和字符串在JAVA中是不同的,字符串 双引号 字符 单引号!
{
charr[i]=' ' ;//字符串数组能存空格,属实是又学会了
end=i-1;
{
int a=begin;//begin和end下面还要接着用,搞关系太复杂,直接开AB替代这两个变量。
int b=end;
char temp;
while(a<=b)//循环不变量。
{
charr[b]=s.charAt(a);
charr[a]=s.charAt(b);
a++;
b--;
}//慢慢努力,直到各自遇见,注意判断条件里的等号不能删除
}
begin=i+1;//此处注意 begin和end的处理,赋值更换顺序,end及时更新是为了交换做准备,交换完更新begin是为下一次交换做准备
}
if(i==len-1)//对最后的len-1,到头没有空格,需要单独反转存入数组中。
{
end=i;
{
int a=begin;
int b=end;
char temp;
while(a<=b)
{
charr[b]=s.charAt(a);
charr[a]=s.charAt(b);
a++;
b--;
}
}
}
}
return String.valueOf(charr);//最后这个String类里面自带的valueOf方法属实是牛了!返回一个字符串,是字符数组,省去自己拼接的操作了!
}