LeetCode75——Day22

文章目录

一、题目

1657. Determine if Two Strings Are Close

Two strings are considered close if you can attain one from the other using the following operations:

Operation 1: Swap any two existing characters.

For example, abcde -> aecdb

Operation 2: Transform every occurrence of one existing character into another existing character, and do the same with the other character.

For example, aacabb -> bbcbaa (all a's turn into b's, and all b's turn into a's)

You can use the operations on either string as many times as necessary.

Given two strings, word1 and word2, return true if word1 and word2 are close, and false otherwise.

Example 1:

Input: word1 = "abc", word2 = "bca"

Output: true

Explanation: You can attain word2 from word1 in 2 operations.

Apply Operation 1: "abc" -> "acb"

Apply Operation 1: "acb" -> "bca"

Example 2:

Input: word1 = "a", word2 = "aa"

Output: false

Explanation: It is impossible to attain word2 from word1, or vice versa, in any number of operations.

Example 3:

Input: word1 = "cabbba", word2 = "abbccc"

Output: true

Explanation: You can attain word2 from word1 in 3 operations.

Apply Operation 1: "cabbba" -> "caabbb"

Apply Operation 2: "caabbb" -> "baaccc"

Apply Operation 2: "baaccc" -> "abbccc"

Constraints:

1 <= word1.length, word2.length <= 105

word1 and word2 contain only lowercase English letters.

题目来源: leetcode

二、题解

当两个字符串,所拥有的共同字符类型完全相同,且字母出现数目以及出现该数目的个数完全相同时,这两个字符串是close的。

cpp 复制代码
class Solution {
public:
    bool closeStrings(string word1, string word2) {
        int n1 = word1.length();
        int n2 = word2.length();
        vector<int> map1(26,0);
        vector<int> map2(26,0);
        vector<int> times(max(n1,n2) + 1,0);
        for(int i = 0;i < n1;i++) map1[word1[i] - 'a']++;
        for(int i = 0;i < n2;i++) map2[word2[i] - 'a']++;
        //如果有字母不在交集中
        for(int i = 0;i < 26;i++){
            if((map1[i] == 0 && map2[i] != 0) || (map1[i] != 0 && map2[i] == 0)) return false;
        }
        //统计出现次数的个数
        for(int i = 0;i < 26;i++){
            if(map1[i] != 0) {
                times[map1[i]]++;   
            }
        }
        for(int i = 0;i < 26;i++){
            if(map2[i] != 0) times[map2[i]]--;
            if(times[map2[i]] < 0) return false;
        }
        return true;
    }
};
相关推荐
v_34836087621 小时前
Android native端 堆栈打印
android·算法
residual_fan1 小时前
【学术论文】航空发动机故障诊断智能体:基于持续对比强化学习的动态优化方法
人工智能·算法·数据挖掘·数据分析
GG-_-Bond2 小时前
9.1 kv存储resp协议模拟面试
c++
GreenTea2 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
米糕闯编程2 小时前
鱼香ros2(五)用C++编写节点
c++·ros2·cmakelists·鱼香
深圳满意度咨询3 小时前
医院满意度数字化测评系统:从数据采集到智能决策的技术实践
算法
xiangyun614 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun614 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
OKkankan5 小时前
LangChain 能力详解!:输出解析、RAG、向量数据库与 Retriever 检索器
数据结构·python·langchain·ai应用
蓝速科技5 小时前
便民服务大厅 AI 数字人一体机场景适配与落地指南丨蓝速科技
大数据·网络·数据结构·人工智能·自然语言处理·数据分析·运维开发