zoukankan      html  css  js  c++  java
  • 893. Groups of Special-Equivalent Strings 奇数偶数位上的相同数

    [抄题]:

    You are given an array A of strings.

    Two strings S and T are special-equivalent if after any number of moves, S == T.

    move consists of choosing two indices i and j with i % 2 == j % 2, and swapping S[i] with S[j].

    Now, a group of special-equivalent strings from A is a non-empty subset S of A such that any string not in S is not special-equivalent with any string in S.

    Return the number of groups of special-equivalent strings from A.

     

    Example 1:

    Input: ["a","b","c","a","c","c"]
    Output: 3
    Explanation: 3 groups ["a","a"], ["b"], ["c","c","c"]
    

    Example 2:

    Input: ["aa","bb","ab","ba"]
    Output: 4
    Explanation: 4 groups ["aa"], ["bb"], ["ab"], ["ba"]
    

    Example 3:

    Input: ["abc","acb","bac","bca","cab","cba"]
    Output: 3
    Explanation: 3 groups ["abc","cba"], ["acb","bca"], ["bac","cab"]
    

    Example 4:

    Input: ["abcd","cdab","adcb","cbad"]
    Output: 1
    Explanation: 1 group ["abcd","cdab","adcb","cbad"]

     [暴力解法]:

    时间分析:

    空间分析:

     [优化后]:

    时间分析:

    空间分析:

    [奇葩输出条件]:

    [奇葩corner case]:

    [思维问题]:

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [一句话思路]:

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    多开几个数组就行了

    [复杂度]:Time complexity: O(n) Space complexity: O(n)

    [算法思想:迭代/递归/分治/贪心]:

    [关键模板化代码]:

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

     [是否头一次写此类driver funcion的代码] :

     [潜台词] :

    class Solution {
        public int numSpecialEquivGroups(String[] A) {
            //corner case
          if (A == null || A.length == 0) return 0;
          
          //initialization: 2 arrays and a set
          Set<String> set = new HashSet<>();
          for (String s : A) {
            int[] old = new int[26];
            int[] even = new int[26];
            for (int i = 0; i < s.length(); i++) {
              //add to the old or even array
              if (i % 2 == 0) {
                even[s.charAt(i) - 'a']++;
              } else {
                old[s.charAt(i) - 'a']++;
              }
            }
            String sig = Arrays.toString(old) + Arrays.toString(even);
            set.add(sig);
          }
    /*
        acb
    old [0, 0, 1...]
    even [1, 1, 0...]
    
      bca
    old[0, 0, 1...]
    even[1, 1, 0...]
    */
          
          
          //return
          return set.size();
        }
    }
    View Code

     

  • 相关阅读:
    菜根谭#39
    菜根谭#38
    菜根谭#37
    菜根谭#36
    菜根谭#35
    菜根谭#34
    菜根谭#33
    菜根谭#32
    mysqli的使用
    mysql常用修改创建语句
  • 原文地址:https://www.cnblogs.com/immiao0319/p/9808749.html
Copyright © 2011-2022 走看看