java字符串在线反转义工具_算法

 

 

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方法属实是牛了!返回一个字符串,是字符数组,省去自己拼接的操作了!
	}