• 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;
        }
    };
    
  • 相关阅读:
    tomcat对sessionId的处理分析
    MySQL 5.5 新增SIGNAL异常处理
    jetty对sessionId的处理分析
    Python3.x和Python2.x的区别
    java actor模型和消息传递简单示例
    构建工具scons让一切变得简单
    HTML元素控件事件表
    开始新的旅途
    JS各种常见知识点
    C#代码与javaScript函数的相互调用
  • 原文地址:https://www.cnblogs.com/wdt1/p/13976186.html
Copyright © 2020-2023  润新知