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;
        }
    };
    
  • 相关阅读:
    LayoutInflater
    android 顶部的通知栏
    ..搞Android了
    数据分组取最大值行
    decode、sign、case在统计中的用法:
    Row generator
    存储过程包实例分享
    Bind variables in 'in' condition(在in中动态的绑定参数(参数个数可变))
    WM_CONCAT字符超过4000的处理办法
    oracle script
  • 原文地址:https://www.cnblogs.com/wdt1/p/13976186.html
Copyright © 2011-2022 走看看