【一题三解】【Java】字符串的翻转

字符串的翻转

看算法总是让我很头疼,我面对递归,面对一些复杂的思维,常看很久以一种效率极低的方式学习。好多好多看不懂的,我甚至都在怀疑自己了,不是学习算法的料子,但是没有基本的算法功底,怎样能做成程序员呢? 再加上三月份的蓝桥杯,CSP认证。诶。只能硬着头皮 继续前行呀 = =

有一道题自己能用三种方法写出,虽然很简单,但是还是很想记录下来。

第一种:(:运用了StringBuilder的reverse函数)

代码如下

public static void f4reverse(String s) {
		StringBuilder stringBuilder = new StringBuilder(s);
		StringBuilder stringBuilder2=stringBuilder.reverse();
		System.out.println(stringBuilder2);
	}
	

第二种: 递归

在这里插入图片描述
(我发现我不会如何将图片旋转= = )
找相同点:取到字符串的最后一个字母,运用递归,依次拼接上字符串的倒数第二个字母。 代码为:s.charAt(end)+f4_2(s, end-1);

找边界点:当end的值逐渐减小到0时,此时返回的值是字符串的第一个字母。

public static String f4_2(String s,int end) {
		if(end == 0){
			return ""+s.charAt(0);
		}
		return s.charAt(end)+f4_2(s, end-1);
	}

第三种:递归 (把字符串转变为字符数组)

把字符串转变为字符数组,正好温故了一下 toCharArray()方法。这种题解的思路是:把第一个字母与后面相邻字符交换,此处用到循环,第一个字母需要交换char.length-1次数即可到达最后的位置。然后再将原字母的第二个字母(也就是经过第一次交换后的首字母)与后面相邻字母交换,交换的次数为char.length-1-1。

代码如下


/** 
	 * f4(s):翻转字符串
	 * 找重复:将每个字母与后面一个字母交换
	 * 找变量:交换次数递减1。
	 * 找边界:当交换次数为1的时候为出口
	 */


public static void f4(char[] c,int begin) {
		if(begin==c.length-1){
			for(int i =0;i<c.length;i++){
				System.out.print(c[i]);
			}
			return;
		}
		char temp;
		for(int i = 0;i<c.length-1-begin;i++){
			temp = c[i]; c[i] = c[i+1]; c[i+1] = temp;
		}
		f4(c,begin+1); 
	}
发布了81 篇原创文章 · 获赞 13 · 访问量 2397

猜你喜欢

转载自blog.csdn.net/alovelypeach/article/details/104118811