Leetcode 2273. 移除字母异位词后的结果数组(可以,一次过)
Published on 2022-06-17 17:17 in 分类: C/C++ with 萧海~
分类: C/C++

Leetcode 2273. 移除字母异位词后的结果数组(可以,一次过)

    在这里插入图片描述
    给你一个下标从 0 开始的字符串 words ,其中 words[i] 由小写英文字符组成。

    在一步操作中,需要选出任一下标 i ,从 words 中 删除 words[i] 。其中下标 i 需要同时满足下述两个条件:

    1. 0 < i < words.length
    2. words[i - 1] 和 words[i] 是 字母异位词 。

    只要可以选出满足条件的下标,就一直执行这个操作。

    在执行所有操作后,返回 words 。可以证明,按任意顺序为每步操作选择下标都会得到相同的结果。

    字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。例如,"dacb" 是 "abdc" 的一个字母异位词。

    示例 1:

    输入:words = ["abba","baba","bbaa","cd","cd"]
    输出:["abba","cd"]
    解释:
    获取结果数组的方法之一是执行下述步骤:
    - 由于 words[2] = "bbaa" 和 words[1] = "baba" 是字母异位词,选择下标 2 并删除 words[2] 。
    现在 words = ["abba","baba","cd","cd"] 。
    - 由于 words[1] = "baba" 和 words[0] = "abba" 是字母异位词,选择下标 1 并删除 words[1] 。
    现在 words = ["abba","cd","cd"] 。
    - 由于 words[2] = "cd" 和 words[1] = "cd" 是字母异位词,选择下标 2 并删除 words[2] 。
    现在 words = ["abba","cd"] 。
    无法再执行任何操作,所以 ["abba","cd"] 是最终答案。

    示例 2:

    输入:words = ["a","b","c","d","e"]
    输出:["a","b","c","d","e"]
    解释:
    words 中不存在互为字母异位词的两个相邻字符串,所以无需执行任何操作。

    提示:

    • 1 <= words.length <= 100
    • 1 <= words[i].length <= 10
    • words[i] 由小写英文字母组成

    Code:

    class Solution {
    public:
    vector<string> removeAnagrams(vector<string>& words) {
    vector<string>res;
    do
    {
    bool flag=false;
    for(int i=1;i<words.size();i++)
    {
    string s1=words[i-1];
    string s2=words[i];
    sort(s1.begin(),s1.end());
    sort(s2.begin(),s2.end());
    if(s1==s2)
    {
    flag=true;
    words.erase(words.begin()+i);
    }
    }
    if(!flag)
    break;
    }while(1);
    return words;
    }
    };
    posted @   萧海~  阅读(31)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    点击右上角即可分享
    微信分享提示
    电磁波切换