题解 | #名字串生成I#
名字串生成I
https://www.nowcoder.com/practice/6544721abdd54f1f938f2a98ac03922a
- 题目考察的知识点
字符串,辗转相除法
- 题目解答方法的文字分析
由于str1和str2是由同一个子串p重复多次变成的,那么设mp为str1,np为str2。那么str1+str2和str2+str1皆为为(m+n)*p。所以,这两者相比较必然相等,否则返回"";设所求最长子串为t乘以p,则t乘以p即可以重复多次形成m乘以p,也可以形成n乘以p,那么所求的t是m,n的最大公约数。为此t乘以p.length也是m乘以p.length,n乘以p.length的最大公约数。用辗转相除法就可求出t乘以p。
- 本题解析所用的编程语言
java
- 完整且正确的编程代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str1 string字符串
* @param str2 string字符串
* @return string字符串
*/
public String gcdOfStrings (String str1, String str2) {
if(!(str1+str2).equals(str2+str1)){
return "";
}
return str1.substring(0,gcd(str1.length(),str2.length()));
}
public int gcd(int slen1,int slen2){
return slen2==0?slen1:gcd(slen2,slen1%slen2);
}
}