检查替换后的词是否有效

题目描述

给你一个字符串 s ,请你判断它是否 有效 。
字符串 s 有效 需要满足:假设开始有一个空字符串 t = “” ,你可以执行 任意次 下述操作将 t 转换为 s :

将字符串 “abc” 插入到 t 中的任意位置。形式上,t 变为 tleft + “abc” + tright,其中 t == tleft + tright 。注意,tleft 和 tright 可能为 空 。
如果字符串 s 有效,则返回 true;否则,返回 false。

示例 1:

输入:s = “aabcbc”
输出:true
解释:
“” -> “abc” -> “aabcbc”
因此,“aabcbc” 有效。
示例 2:

输入:s = “abcabcababcc”
输出:true
解释:
“” -> “abc” -> “abcabc” -> “abcabcabc” -> “abcabcababcc”
因此,“abcabcababcc” 有效。
示例 3:

输入:s = “abccba”
输出:false
解释:执行操作无法得到 “abccba” 。

提示:

1 <= s.length <= 2 * 104
s 由字母 ‘a’、‘b’ 和 ‘c’ 组成

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/check-if-word-is-valid-after-substitutions
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析

栈的应用
遍历字符串,如果遇到’a’、‘b’入栈;遇到’c’,出栈两个字符,判断这两个字符是否分别为’b’、‘a’。

代码

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack=new Stack<>();
        for(char c:s.toCharArray()){
            if(c!='c'){
                stack.push(c);
            }else{
                if(stack.size()<2){
                    return false;
                }
                char m=stack.pop();
                char n=stack.pop();
                if(m!='b' || n!='a'){
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
同义替换是一种常见的文本增强技术,可以通过替换文本中的某些语,从而扩充训练数据集的规模。下面我将为您介绍一种基于WordNet的同义替换方法。 WordNet是一个英语汇数据库,其中包含了大量的同义、反义性、义等信息。我们可以通过Python中的nltk库来使用WordNet。下面是一种基于WordNet的同义替换方法的实现: ```python import nltk from nltk.corpus import wordnet nltk.download('wordnet') # 下载WordNet数据集 def get_synonyms(word): synonyms = set() for syn in wordnet.synsets(word): for lemma in syn.lemmas(): synonyms.add(lemma.name()) return list(synonyms) def synonym_replacement(text, n=1): words = nltk.word_tokenize(text) new_words = words.copy() random_word_list = list(set([word for word in words if word not in stop_words])) random.shuffle(random_word_list) num_replaced = 0 for random_word in random_word_list: synonyms = get_synonyms(random_word) if len(synonyms) > 0: synonym = random.choice(synonyms) new_words = [synonym if word == random_word else word for word in new_words] num_replaced += 1 if num_replaced >= n: # 替换n个单后退出循环 break sentence = ' '.join(new_words) return sentence ``` 该方法的思路是,先将文本分,然后对于每个单,从WordNet中获取其同义列表,从中随机选择一个同义进行替换。需要注意的是,如果同义列表为空,则不进行替换。另外,为了避免替换停用等无意义的单,可以先将它们从候选单列表中剔除。 使用该方法进行同义替换非常简单,只需要调用`synonym_replacement()`函数即可。例如,对于一个字符串进行同义替换: ```python text = "我爱自然语言处理" new_text = synonym_replacement(text) print(new_text) # '我爱自然语言处理' ``` 其中,n参数表示替换的单数量,可以根据需要进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值