hihocoder #1110 正则表达式

部署运行你感兴趣的模型镜像

偶然看到的,看标签是dp和分治就做了。

题目链接:

http://hihocoder.com/problemset/problem/1110

分析:

dp[i][j]代表从i到j这一段是否为正则表达式。然后主要是有一个完整的括号的时候或者结尾是*的时候转移一下。

具体看代码。

<span style="font-size:14px;">#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 105;
int f[maxn][maxn];
char s[maxn];
int dfs(int i,int j)
{
    //cout<<"i="<<i<<" j="<<j<<endl;
    if(i>j) return 0;
    if(i==j&&(s[i]=='0'||s[i]=='1')) return f[i][j]=1;
    if(i==j&&(s[i]!='0'&&s[i]!='1')) return f[i][j]=0;
    if(f[i][j]!=-1) return f[i][j];
    if(s[j]=='*') return f[i][j]=dfs(i,j-1);
    if(s[i]=='('&&s[j]==')')
        if(dfs(i+1,j-1)) return f[i][j]=1;
    for(int k=i;k<j;k++)
        if(s[k]=='|')
        {
            if(dfs(i,k-1)&&dfs(k+1,j)) return f[i][j]=1;
        }
        else
        {
            if(dfs(i,k)&&dfs(k+1,j)) return f[i][j]=1;
        }
    return f[i][j]=0;
}
int main()
{
    freopen("in.txt","r",stdin);
    while(~scanf("%s",s))
    {
      memset(f,-1,sizeof(f));
      int len=strlen(s);
      if(dfs(0,len-1))
        printf("yes\n");
      else printf("no\n");
    }
    return 0;
}
</span>




您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

<think>首先,用户要求使用中文回答问题。问题是:“帮我生成”#数字#“的正则表达式”。这看起来像是要生成一个正则表达式匹配#数字#”这样的字符串,其中“数字”可能代表任意数字。 我需要理解“#数字#”的含义。用户说“帮我生成”#数字#“的正则表达式”,所以“#数字#”很可能是一个模式,意思是匹配#开头,然后是数字,然后是#结尾的字符串。这里的“数字”可能指代数字序列,所以正则表达式应该匹配#123#这样的字符串。 所以,正则表达式应该是:#\d+#,其中\d+表示一个或多个数字。 确认: - # 是字面字符。 - \d+ 表示一个或多个数字。 - # 是另一个字面字符。 在正则表达式中,#需要转义吗?不需要,因为#在大多数正则引擎中不是特殊字符,除非在特定上下文中。所以直接使用#即可。 因此,最终正则表达式是:#\d+#。 现在,我需要在回答中解释这个正则表达式- 用中文解释。 - 提供代码示例,可能用JavaScript或其他语言,但由于用户没有指定,我会用通用的正则表达式格式。 - 按照规则,回答后必须提出3-5个相关问题,以“§§相关问题§§”开头。 回答结构: 1. 解释用户的问题。 2. 给出正则表达式。 3. 解释正则表达式的含义。 4. 提供示例代码。 5. 结束回答。 6. 然后输出“§§相关问题§§”和3-5个相关问题。 相关问题必须基于用户的问题和我的回答。用户的问题是生成正则表达式匹配#数字#”模式。所以相关问题可以围绕正则表达式定制、扩展、常见问题等。 可能的§§相关问题§§: 1. 如何修改这个正则表达式匹配可选的前后空格? 2. 如果数字部分可以有小数点,正则表达式该如何适配? 3. 在Python中使用这个正则表达式时如何提取匹配的数字内容? 4. 如何匹配多个连续的#数字#模式? 5. 正则表达式中的\d+和[0-9]+有何区别? 确保有3-5个。 最后,输出必须严格按照格式: - 回答内容。 - 然后“§§相关问题§§”在第一行。 - 接着是1. 2. 3. 等问题,禁止换行分散,意思是问题列表应该连续,不要有额外换行。 在示例中,是: §§相关问题§§ 1. ··· 2. ··· 3. ··· 所以,我应该输出: §§相关问题§§ 1. 问题1 2. 问题2 3. 问题3 现在,撰写回答: 用户的问题是“帮我生成”#数字#“的正则表达式”,即匹配#开头、数字序列、#结尾的字符串。 正则表达式是:#\d+# 解释: - #匹配字面字符# - \d+:匹配一个或多个数字(\d代表数字) - #匹配字面字符# 举例:匹配"#123#",不匹配"#abc#"或其他。 示例代码,用JavaScript演示: ```javascript const regex = /#\d+#/; console.log(regex.test("#123#")); // true console.log(regex.test("#abc#")); // false ``` 然后,结束回答部分。 最后,§§相关问题§§: 1. 如何让这个正则表达式忽略字符串前后的空格? 2. 如果数字可以是小数(如#123.45#),正则表达式该如何修改? 3. 在正则表达式中,如何捕获数字部分的内容? 4. \d+和[0-9]+在匹配数字时有何异同? 5. 如何扩展这个正则表达式匹配多个#数字#模式? 确保是3-5个,我选了5个。 完整输出: ... §§相关问题§§ 1. 如何让这个正则表达式忽略字符串前后的空格? 2. 如果数字可以是小数(如#123.45#),正则表达式该如何修改? 3. 在正则表达式中,如何捕获数字部分的内容? 4. \d+和[0-9]+在匹配数字时有何异同? 5. 如何扩展这个正则表达式匹配多个#数字#模式? </think>要生成匹配#数字#”模式的正则表达式(其中“数字”代表任意数字序列),核心表达式如下: ### 正则表达式: ```regex #\d+# ``` ### 解释: - **`#`**:匹配字面字符 `#`(起始符) - **`\d+`**:匹配一个或多个数字(`\d` 表示数字,`+` 表示至少一次) - **`#`**:匹配字面字符 `#`(结束符) ### 代码示例(JavaScript验证): ```javascript const regex = /#\d+#/; console.log(regex.test("#123#")); // true(匹配数字序列) console.log(regex.test("#42#")); // true console.log(regex.test("#abc#")); // false(非数字) console.log(regex.test("123#")); // false(缺少起始#) ``` ### 注意事项: - **严格匹配格式**:仅匹配以 `#` 开头和结尾、中间为纯数字的字符串(如 `#2024#`) - **转义处理**:`#` 在正则中无需转义,但若需匹配特殊字符(如 `+`、`.`),需用 `\` 转义 - **多语言通用**:此表达式适用于 Python、Java、JavaScript 等主流语言
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值