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

这篇具有很好参考价值的文章主要介绍了【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.文章来源地址https://www.toymoban.com/news/detail-727775.html

代码题解

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
    }

}

到了这里,关于【2023美团后端-8】删除字符串的方案,限制不能连续删的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c#如何把字符串中的指定字符删除

    可以使用以下四种方法: 一、使用:Replace public string Replace(char oldChar,char newChar); 在对象中寻找oldChar,如果寻找到,就用newChar将oldChar替换掉。 1、实例代码:   2、执行结果: 二、Remove(C#删除字符串) 1.public string Remove(int startIndex); 从startIndex位置开始,删除此位置后

    2024年02月02日
    浏览(36)
  • C语言实现删除字符串中重复字符的算法

    C语言实现删除字符串中重复字符的算法 问题描述: 给定一个字符串,我们需要编写一个C语言函数,以删除字符串中的重复字符。例如,对于输入字符串\\\"hello world\\\",函数应该返回\\\"hel wrd\\\"。 算法思路: 为了解决这个问题,我们可以使用一个哈希表来跟踪每个字符的出现次数。

    2024年02月04日
    浏览(32)
  • Redis 分批删除字符串键操作

    有时候我们需要清理一些非常大的key(如hash键),或者通配非常多的(如string类型), 如果直接使用keys、del操作会对线上的redis有性能影响,一般建议使用unlink 异步删除操作,释放交给redis自身去处理,但也有一些场景,可能需要快速释放内存,或者通配去删除 ,或者针对

    2024年02月15日
    浏览(32)
  • JavaScript删除字符串最后一个字符的三种方法

    JavaScript删除字符串最后一个字符的三种方法 在JavaScript中,我们经常需要操作字符串。有时候,我们可能需要删除字符串的最后一个字符。下面将介绍三种常见的方法来实现这个目标。 方法一:使用 slice 函数 slice 函数是JavaScript中一个常用的字符串方法,它可以返回一个新的

    2024年02月08日
    浏览(42)
  • 如何从 Python 中的字符串列表中删除特殊字符?

    在进行字符串处理和文本分析时,有时我们需要从字符串列表中删除特殊字符。特殊字符可能是空格、标点符号、换行符等,在某些情况下它们可能干扰我们的文本处理或分析任务。Python 提供了多种方法来删除字符串列表中的特殊字符。本文将详细介绍在 Python 中删除字符串

    2024年02月08日
    浏览(43)
  • JavaScript删除字符串中指定字符的四种方法

    推荐使用第一种 第四种 方法一:使用 replace()方法 replace()方法用于将特定字符或字符串替换为其他字符或字符串 参数: 第一个参数是待替换的字符或字符串 , 第二个参数是替换为的字符或字符串。 可以将第一个参数设为 要删除的字符 ,将第二个参数 设为空字符串 ,这样

    2024年02月15日
    浏览(43)
  • C#删除字符串最后一个字符的几种方法

    字符串:string s = \\\"1,2,3,4,5,\\\" 目标:删除最后一个 \\\",\\\" 方法一: s = s.Remove(s.LastIndexOf(\\\",\\\"), 1); ; //移除掉最后一个\\\",\\\" 方法二:用的最多的是Substring,这个也是我一直用的 s = s.Substring(0,s.Length - 1) 方法三:用TrimEnd,这个东西传递的是一个字符数组 s=s.TrimEnd(\\\',\\\') //如果要删除\\\"5,\\\",则需

    2023年04月21日
    浏览(30)
  • 【LeetCode】583. 两个字符串的删除操作

    这道题的状态定义和 1143. 最长公共子序列 相同,「定义一个 dp 数组,其中 dp[i]表示 到位置 i 为止的子序列性质 ,并不是必须以 i 结尾」,此时 dp 数组的最后一位即为题目所求,不需要对每个位置进行统计。 状态定义 dp[i][j] 表示到 字符串word1 的第 i 个字符为止、word2 的第

    2024年02月06日
    浏览(34)
  • Java 字符串中删除子字符串的9种方法详细内容(remove substring from String)

    Java 中的字符串中删除子字符串有以下方法: 1.Using replace method使用替换方法 2.Using Charsequence使用字符序列 3.Replace the Substring with an empty string用空字符串替换子字符串 4.Using String’s replaceFirst method使用 String 的 replaceFirst 方法 5.replaceFirst() method 6.Using replaceAll method 使用 replaceAll 方

    2024年02月16日
    浏览(31)
  • 1047. 删除字符串中的所有相邻重复项

    给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

    2024年02月10日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包