------
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;i<a.length();i++){
for(int j = 0;j<b.length();j++){
int m = i;
int n = j;
//判断第一个字符是否相等
if(a.charAt(m)==b.charAt(n)){
temp = a.charAt(m)+"";
//第一个字符相等时,判断之后的字符是否相等
while(++m<a.length() && ++n<b.length()){
if(a.charAt(m)==b.charAt(n)){
temp += a.charAt(m);
}
}
//和之前获取的子串长度相比较,获取长度大的子串
if(temp.length()>tem.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<minString.length();i++)
for(int j=0,z=minString.length()-i;z!=minString.length()+1;j++,z++){
temp = minString.substring(j,z);
if(maxString.contains(temp))
return temp;
}
return "";
}
}
如果我一开始就按照视频的顺序从头看到尾,我只能学习到老师给的方法,绝对不会想到第一种方法。所以,我总结出了一种学习的方法,在掌握了基本的概念之后,在做练习题时,不妨自己先试着做一下,哪怕花的时间会多一些,都是值得的,因为每个人的思想不同,即使你的方法在实现上不如老师给的,但毕竟是自己研究出来的,在做题的过程中,既是对知识点的巩固与掌握,也是对应用知识解决问题能力的提升。