古老的算法,辗转相除法,又叫欧几里得算法。
如果求6和4的最大公因子,过程就是:
6%4=2
4%2=0 最大公因子是2
如果求8和6的最大公因子,过程就是:
8%6=2
6%2=0 最大公因子是2
如果求5和3的最大公因子,过程就是:
5%3=2
3%2=1
2%1=0 最大公因子是1
方法显而易见是用递归:
public int gcd(int m,int n){
if(n==0) return m;
int r=m%n;
return gcd(n,r);
}
一行简化:
public int gcd(int m,int n){
return n==0?m:gcd(n,m%n);
}
如果求两个字符串的最大公共字符串,将字符串的长度套用欧几里得算法:
首先判断两字符串是不是含有公共字符串:
如果str1含有M个X,str2含有N个X,那么str1+str2得到的字符串和str2+str1得到的字符串内容相同,不用“==”,因为地址不同:
if(!(str1+str2).equals(str2+str1)) return "";
找最大公共字符串:
return str1.substring(0,gcd(str1.length(),str2.length()));
撒花*,°*:.( ̄▽ ̄)/:.° 。