1137. 第 N 个泰波那契数 AND 5193. 删除字符使字符串变好

222 阅读2分钟

这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战

5193. 删除字符使字符串变好

一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 。

给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 。

请你返回删除后的字符串。题目数据保证答案总是 唯一的 。

 

示例 1:

输入:s = "leeetcode" 输出:"leetcode" 解释: 从第一组 'e' 里面删除一个 'e' ,得到 "leetcode" 。 没有连续三个相同字符,所以返回 "leetcode" 。 示例 2:

输入:s = "aaabaaaa" 输出:"aabaa" 解释: 从第一组 'a' 里面删除一个 'a' ,得到 "aabaaaa" 。 从第二组 'a' 里面删除两个 'a' ,得到 "aabaa" 。 没有连续三个相同字符,所以返回 "aabaa" 。 示例 3:

输入:s = "aab" 输出:"aab" 解释:没有连续三个相同字符,所以返回 "aab" 。

image.png

解题思路

当遇到3个连续字符时,不加入最终最终结果的字符串,最后就可以保证结果字符串是好字符串

代码

class Solution {
    public String makeFancyString(String s) {

        char pre=s.charAt(0);
        int cnt=1,res=0;
        StringBuilder stringBuilder=new StringBuilder();
                stringBuilder.append(pre);
        for (int i=1;i<s.length();i++)
        {
            if(s.charAt(i)==pre)
            {
                if (++cnt<=2)
                {
                    stringBuilder.append(s.charAt(i));

                }
                
            }else{
                cnt=1;
                pre=s.charAt(i);
                stringBuilder.append(pre);
            }
        }

        return stringBuilder.toString();
    }
}

1137. 第 N 个泰波那契数

泰波那契序列 Tn 定义如下:

T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2

给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

  • 示例 1:

输入:n = 4 输出:4 解释: T_3 = 0 + 1 + 1 = 2 T_4 = 1 + 1 + 2 = 4

  • 示例 2:

输入:n = 25 输出:1389537

提示:

0 <= n <= 37

image.png

解题思路

使用递推,因为递推公式题目已经给出了,Tn+3 = Tn + Tn+1 + Tn+2,因此我们可以直接通过递推得出结果

代码

class Solution {
    public int tribonacci(int n) {

         
        int[] dp = new int[n + 1];       
        if(n==0) return 0;
        if(n==1) return 1;
        if(n==2) return 1;
        if(n==3) return 2;
        dp[0]=0;
        dp[1]=1;
        dp[2]=1;
        dp[3]=2;
        for (int i=4;i<=n;i++)
            dp[i]=dp[i-1]*2-dp[i-4];
        return dp[n];
    }
}