LeetCode1071字符串的最大公因子

题目描述

  对于字符串 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;
                }
            }
        }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值