【2023美团后端-8】删除字符串的方案,限制不能连续删

小美定义一个字符申是"美丽串",当且仅当该字符串包含"mei"连续子串。例如"meimei"、"xiaomeichan"都是美丽串,现在小美拿到了一个字符串,她准备删除一些字符,但不能删除两个连续字符。小美希望最终字符串变成美丽串,她想知道有多少种删除方案?

输入描述

一个仅包含小写字母的字符串,长度不超过 20。

输出描述

删除的方案数

示例1

input

meili

output

3

解释: 可以删除l,i,或者不删.共3种.

思路:

暴力搜索,

preDeleted记录前序的状态,false表示未操作,true表示删除.

having记录当前拥有了几个序列.

base case: 字符串遍历结束.

注意: 初始为0,false,0, 遇到m直接置1,having=3随便操作,having<3,选用了其他字符,having置0.

代码题解

复制代码
import java.util.*;

public class test {
    static int len = 0;
    static String str = "";
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        str = sc.nextLine();
        // 遍历字符串,找到连续的 "mei" 子串
        len = str.length();
        int count = dfs(0,false,0);
        System.out.println(count);
    }

    /**
     * 深搜
     * @param index 当前i
     * @param preDeleted 标前一个是否删除
     * @param having 拥有mei的数量 遇到m给1,1后遇到e给2..
     * @return 数量
     */
    private static int dfs(int index, boolean preDeleted, int having) {
        if (index >= len) {
            if (having==3) {
                return 1;
            }
            return 0;
        }
        if (preDeleted) {//前序删除,所以当前直接跳过不删
            return calCount(index,having);
        } else {//删除+不删
            int tmp = dfs(index + 1, true, having);//删除
            return calCount(index,having)+tmp;
        }
    }

    /**
     * 处理状态的转换
     * @param index
     * @param having
     * @return
     */
    private static int calCount(int index, int having) {
        if ((having==0||having==1||having==2) && str.charAt(index)=='m') {
            return dfs(index+1,false,1);//遇到m则having置1
        } else if (having==1 && str.charAt(index)=='e') {
            return dfs(index+1,false,2);//遇到e则having置2
        } else if ((having==2 && str.charAt(index)=='i')||having==3) {
            return dfs(index+1,false,3);//遇到e则having置2
        } else
            return dfs(index+1,false,0);//选了其他则having置0
    }

}
相关推荐
专注仿真4 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
码爸5 小时前
支持向量机介绍与示例
算法·机器学习·支持向量机
怕浪猫5 小时前
2028编程圈很火的10个Skills
算法·面试·github
Nil2089 小时前
leetcode 198打家劫舍
算法·leetcode·职场和发展
Shaoshing10 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
loulanyue_10 小时前
构建房产认知决策智能:Harness底座与AI自进化的技术实践——读贝壳首席算法科学家尹俊希2026云栖专场演讲
人工智能·算法
碧海银沙音频科技研究院10 小时前
基于炬芯ATS录音卡BLE控制协议
人工智能·嵌入式硬件·算法·语音识别
suhan11 小时前
【数据结构】三、栈和队列:6.链队列、双端队列、队列的应用(树的层次遍历、广度优先BFS、先来先服务FCFS)
数据结构·后端·算法
姜鱼问生11 小时前
Docker Volume 备份与恢复实战:不停机迁移数据
后端·算法·架构
suhan11 小时前
【数据结构】三、栈和队列:5.顺序队列(循环队列)(初始化,判空判满,入队,出队,实例)
数据结构·后端·算法