其他分享
首页 > 其他分享> > 力扣Day27

力扣Day27

作者:互联网

459、重复的子字符串

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

 法一:

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        String str = s + s;
        return str.substring(1, str.length() - 1).contains(s);
    }
}

法二:暴力解法:存在重复的子字符串,那么字符串s一定是子字符串的倍数

class Solution {
    public boolean repeatedSubstringPattern(String s) {
       int n = s.length();
        for(int r = n/2; r >= 1; r--){
            if(n % r == 0){
                String substring = s.substring(0, r);
                StringBuilder sb = new StringBuilder();
                for(int i = 0; i < n / r; i++){
                    sb.append(substring);
                }
                if(sb.toString().equals(s)) return true;
            }
        }
        return false;
    }
}

 461、汉明距离

两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。给你两个整数 x 和 y,计算并返回它们之间的汉明距离。

法一:二进制——位运算 (思路与Day15的191、位1的个数  一样)

class Solution {
    public int hammingDistance(int x, int y) {
        int count=0;
        int res=x^y;
        while(res!= 0) {
            if((res & 1) == 1) {
                count++;
            }
            res=res >>> 1;
        }
        return count;
    }
}

 法二:内置位计数

2006、差的绝对值为 K 的数对数目

给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j|nums[i] - nums[j]| == k

|x| 的值定义为:

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

​

标签:substring,return,String,nums,int,res,Day27,力扣
来源: https://blog.csdn.net/qq_51329170/article/details/122839876