题目描述:
对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。
返回字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。
示例 1:
输入:str1 = “ABCABC”, str2 = “ABC”
输出:“ABC”
示例 2:
输入:str1 = “ABABAB”, str2 = “ABAB”
输出:“AB”
示例 3:
输入:str1 = “LEET”, str2 = “CODE”
输出:""
提示:
1 <= str1.length <= 1000
1 <= str2.length <= 1000
str1[i] 和 str2[i] 为大写英文字母
思路很简单,从str1和str2中先得到最大公因子数,然后尝试进行拼接,看能否,否则继续
代码:
class Solution { public String gcdOfStrings(String str1, String str2) { //默认的是str1的长度大于str2的长度if(str1.length() < str2.length()){String tem = str1;str1 = str2;str2 = tem;}if(!str1.contains(str2)){return "";}int len1 = str1.length();int len2 = str2.length();int index = len2;while (index >= 1) {if(len1 % index == 0 && len2 % index == 0){ //尝试拼接String tem = str2.substring(0,index);StringBuffer sb1 = new StringBuffer(tem);while (sb1.length() != str1.length()) {sb1.append(tem);}StringBuffer sb2 = new StringBuffer(tem);while (sb2.length() != str2.length()) {sb2.append(tem);}if(new String(sb1).equals(str1) && new String(sb2).equals(str2)){return tem;}}index --;}return ""; } }
123456789101112131415161718192021222324252627282930313233343536一开始以为这样的思路很傻,但是后面发现普遍是这样来的。。。