题目描述
对于字符串 s 和 t,只有在 s = t + t + t + … + t + t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。给定两个字符串 str1 和 str2 。返回 最长字符串 x,要求满足 x 能除尽 str1 且 x 能除尽 str2 。
解析
首先如果被这道简单题弄自闭了,大可不必沮丧,这题主要需要把隐藏信息提取出来,否则是无从下手的,比如数学方法,想不到那个性质是根本不会想到那种优化方法的。
这题实际上需要好好了解一下题目信息,题目中有一些没有明显说明的信息:因子的第一个字母一定和字符串的第一个字母相同;因子一定是从头开始的某一个长度的子串;字符串的长度一定能整除因子的长度;
枚举
那么就能很容易想到一个暴力方法,依次遍历字符串,不断判断当前子串(从头到遍历到的字符)是否为这个字符串的因子。
首先可以编写判断函数,输入因子和字符串,判断这个因子是否为字符串的因子。首先可以进行剪枝操作,如果字符串的长度不能除尽因子的长度,那么输入的因子一定不是输入字符串的因子。然后就遍历字符串判断字符串的对应字符和因子对应字符是否相同。
private static boolean isFactor(String str, String factor){
int l1 = str.length();
int l2 = factor.length();
if(l1 % l2 != 0){
return false;
}
else{
for(int i = 0; i < l1; i++){
if(str.charAt(i) != factor.charAt(i % l2)){
return false;
}
}
}

最低0.47元/天 解锁文章
355

被折叠的 条评论
为什么被折叠?



