2006. 差的绝对值为 K 的数对数目 / 1071. 字符串的最大公因子

2006. 差的绝对值为 K 的数对数目【简单题】【每日一题】

思路:

  1. 定义int类型变量ans存储符合条件的个数。
  2. 两层for循环遍历每个数对,判断数对的差的绝对值是否等于k,等于k则ans++。
  3. 循环结束返回ans即可。

代码:

class Solution {
    public int countKDifference(int[] nums, int k) {
        int ans = 0,len = nums.length;
        for (int i = 0; i < len-1; i++) {
            for (int j = i+1; j < len; j++) {
                if (Math.abs(nums[i]-nums[j]) == k){
                    ans++;
                }
            }
        }
        return ans;
    }
}

1071. 字符串的最大公因子【简单题】

思路:【模拟】

  1. 先找出两个字符串的因子,然后找出两个字符串的最大公因子。
  2. 定义一个函数find来寻找字符串的因子,将找到的因子存入list列表中。具体为:
  3. 将字符串分成若干份,从1开始,到字符串本身结束,即i从1开始遍历,到等于字符串长度结束,当长度对i取余为0时,说明此时可以分为i份,于是,递增的阶梯lad为长度÷i,测试因子temple
    = 字符串从0开始到第1个lad处截断,然后从第1个lad开始到第2个lad处截断,判断第2个截断字符串是否与测试因子相等,是则截断下一个字符串,不是则标志位flag置为false,退出当前循环。判断标志位flag,true说明截断的测试字符串全部与测试因子相等,于是list列表添加当前测试因子temple为最终str字符串的因子,开始下一个测试因子的测试,外层for循环结束,str的所有因子就全部添加到了list中,最后返回list即可。
  4. 通过find函数,找出str1和str2的所有因子,分别存入list1和list2中,如果list1为空或list2为空,说明这两个字符串中有一个没有因子,也就没有公因子,因此返回空字符串。
  5. 如果list1和list2均不为空,则通过两层while循环在两个因子列表中找出最大公因子即可。
  6. 如果两层while循环之后依然找不出公因子,那么返回空字符串。

代码:

class Solution {
    public String gcdOfStrings(String str1, String str2) {
        List<String> list1 = find(str1);
        List<String> list2 = find(str2);
        if (list1.size() == 0 || list2.size() == 0){
            return "";
        }
        int i1 = 0,i2 = 0;
        while (i1<list1.size()){
            String s1 = list1.get(i1);
            while (i2<list2.size()){
                String s2 = list2.get(i2);
                if (s1.equals(s2)){
                    return s1;
                }else{
                    if (s2.length() <= s1.length()){
                        break;
                    }
                }
                i2++;
            }
            i1++;
        }
        return "";
    }
    public List<String> find(String str){
        int l = str.length();
        List<String> list = new ArrayList<>();
        for (int i = 1; i <= l; i++) {
            if (l % i == 0){
                int lad = l / i;
                String temple = str.substring(0,lad);
                boolean flag = true;
                for (int j = lad; j <= l-lad ; j+=lad) {
                    if (!str.substring(j,j+lad).equals(temple)){
                        flag = false;
                        break;
                    }
                }
                if (flag){
                    list.add(temple);
                }
            }
        }
        return list;
    }
}

注:
这个思路是我自己想的,用时2ms,击败20%,与题解的0ms比不值一提,但毕竟是自己工作的记忆,还是写了下来。


你可能感兴趣的:(力扣刷题记录,leetcode,java,刷题记录)