小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
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;
}
}