zoukankan      html  css  js  c++  java
  • b_lc_确定两个字符串是否接近(思维题:分类讨论)

    用两种操作使两个字符串是是偶发接近

    • 操作 1:交换任意两个 现有 字符。
      例如,abcde -> aecdb
    • 操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。
      例如,aacabb -> bbcbaa(所有 a 转化为 b ,而所有的 b 转换为 a )

    思路:分类讨论

    • 当两个字符串中的频次都一样时,肯定true
    • 否则,我们可初步确定两个字符串的频次不一样或者它们拥有对方没有的字符
      • 字符种类的个数不一样可以,但是它们要满足具有相同频次,因为即使种类不一样,可以通过转换变为一样
    class Solution {
    public:
        int m1[26], m2[26];
        bool closeStrings(string& s, string& t) {
            int n=s.size(), m=t.size();
            if (n!=m) return false;
            unordered_set<char> s2;
            for (char c : s) m1[c-'a']++;
            for (char c : t) m2[c-'a']++, s2.insert(c);
            bool allEquals=true;
            for (int c=0; c<=25; c++) if (m1[c]!=m2[c]) {
                allEquals=false;
                break;
            }
            if (allEquals) return true;
            sort(m1,m1+26), sort(m2,m2+26);
            for (int c=0; c<=25; c++) if (m1[c] != m2[c]) return false;
            for (char c : s) if (s2.find(c)==s2.end()) return false;
            return true;
        }
    };
    
  • 相关阅读:
    yum管理工具
    ansible简介,简单实用
    ssh服务简介及应用与服务的进程的类型
    keepliave
    NFS
    编译安装redis4.0
    redis多实例和高可用
    NTP时间服务
    ssl简介与openssl的使用
    一些高效学习方法-牛人是怎么来的
  • 原文地址:https://www.cnblogs.com/wdt1/p/13976186.html
Copyright © 2011-2022 走看看