黑马程序员——求两个字符串最大公约数的解法

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

题目:键盘输入两个字符串,获取这两个字符串的最大公约数并打印出来。例如:输入ijsfajk 和 qhsfqal ,输出的最大公约数是sf

      之前在看视频学习的过程中,遇到了这道练习题,在学习老师的解法之前,我先按照自己的思路写了一下,思路及代码如下:

/*
  思路:1.循环遍历两个字符串中的各个字符,判断相等的字符;
        2.如果两个字符相等,则判断该字符在对应字符串中位置之后的字符是否相等,
		  如果是,将相等的部分连接在一起组成新的字符串存储起来;
		3.再次回到循环,将新生成的子串同之前获取的子串的长度进行比较,选择较长的存储。
		4.循环完毕,将最终的子串返回,即为最大公约数。
*/
import java.lang.*;
import java.util.*;
public class MaxString1{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入第一个字符串:");
		String arr1 = sc.nextLine();
		System.out.println("请输入第二个字符串:");
		String arr2 = sc.nextLine();
		String max = maxString(arr1,arr2);
		System.out.println("输入的两个字符串的最大公约数是:"+max);
	}
	public static String maxString(String a,String b){
		String temp = "";    //临时存储所获取的子串
		String tem = "";     //存储当前最大长度的子串
		//双重for循环遍历两个字符串中的各个字符
		for(int i = 0;item.length())
					tem = temp;

			}
		}
		}
		return tem;
	}
	
}

    以上便是我自己的思路及解法,经过半个多小时的调试,也可以运行出正确的结果。于是,我带着一种成就感继续看老师的解法,发现老师的思路跟我的完全不一样,不仅简便很多,就连代码实现上也简单了很多。主方法就不写了,只看功能实现的方法:

/*
	思路:1.比较两个字符串的长度;
	      2.将较短字符串按照长度递减的方式获取到;
	      3.判断获取到的字符串在较长字符串中是否存在,若存在,则是最大公约数。
*/
public static String maxString(String arr1,String arr2){
		String maxString;  //存储较大字符串
		String minString;  //存储较小字符串
		String temp = "";
		//比较两个字符串的长度
		if(arr1.length()>arr2.length()){
			maxString = arr1;
			minString = arr2;
		}else{
			maxString = arr2;
			minString = arr1;
		}
		//将较小字符串递减,并判断是否被较大字符串所包含
		for(int i = 0;i

       如果我一开始就按照视频的顺序从头看到尾,我只能学习到老师给的方法,绝对不会想到第一种方法。所以,我总结出了一种学习的方法,在掌握了基本的概念之后,在做练习题时,不妨自己先试着做一下,哪怕花的时间会多一些,都是值得的,因为每个人的思想不同,即使你的方法在实现上不如老师给的,但毕竟是自己研究出来的,在做题的过程中,既是对知识点的巩固与掌握,也是对应用知识解决问题能力的提升。



你可能感兴趣的:(学习笔记)