583. 两个字符串的删除操作 And 326. 3的幂

191 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

583. 两个字符串的删除操作

给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。

示例:

输入: "sea", "eat" 输出: 2 解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea"

提示:

  • 给定单词的长度不超过500。
  • 给定单词中的字符只含有小写字母。

解题思路

最长公共子序列的变种,使用dp找出最长公共子序列的长度,每个单词都减去最长公共子序列的长度,得到的就是需要删除的字符个数

代码

class Solution {
    public int minDistance(String word1, String word2) {

        int n=word1.length(),m=word2.length();
        int[][] dp=new int[n+1][m+1];
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                dp[i][j]=word1.charAt(i-1)==word2.charAt(j-1)?dp[i-1][j-1]+1:Math.max(dp[i][j-1],dp[i-1][j]);
            }
        return n+m-dp[n][m]*2;
    }
}

326. 3的幂

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x

示例 1:

输入:n = 27
输出:true
示例 2:

输入:n = 0
输出:false
示例 3:

输入:n = 9
输出:true
示例 4:

输入:n = 45
输出:false

解题思路

3的幂次应该由若干个3相乘而来,因此我们对n不断除以3,如果最后的结果为1,则说明该数全部由3相乘而来,是3的幂次

代码

class Solution {
    public boolean isPowerOfThree(int n) {

if(n==0) return false;
        while(n%3==0)
        {
            n/=3;
        }
        return n==1;
        
    }
}