zoukankan      html  css  js  c++  java
  • 同构体字符串(如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。)

    示例 1:

    输入: s = "egg", t = "add"
    输出: true
    

    示例 2:

    输入: s = "foo", t = "bar"
    输出: false

    示例 3:

    输入: s = "paper", t = "title"
    输出: true

    说明:
    你可以假设 和 具有相同的长度。

    思路:定义并初始化count = 1,第一个字符通常我们记为1,后面出现不同的字符count依次累加,遇见相同的字符,我们找出前面相同字符所表示的数字添加。例如字符串s = "papper"   字符串t = "tittle" ,把s可表示为121134   t可表示为121134  在比较s和t是否相等,

    代码如下:

    public static boolean isIsomorphic(String s,String t) {
            //如果长度不相等直接返回false
            if(s.length() != s.length()) return false;
            //定义StringBuilder对象sb_s 和 sb_t
            StringBuilder sb_s = new StringBuilder();
            StringBuilder sb_t = new StringBuilder();
            //定义两个标记,从1开始,最大可以加到26,因为只有26个字符
            int count_s = 1;
            int count_t = 1;
            //先对两个sb对象添加1,因为首字符不用做比较,它是同构的
            sb_s.append(1);
            sb_t.append(1);
            //从下标1开始遍历遍历
            for(int i = 1;i<s.length();i++) {
                //判断当前字符在前面字符串中的字符是否有相等的,相等返回前面相同字符的下标,不包含返回-1
                int flag_s = isContainsCharacter(s.substring(0, i), s.charAt(i));
                int flag_t = isContainsCharacter(t.substring(0, i), t.charAt(i));
                //有相同字符,那么sb对象就添加之前相同字符下标在sb对象中对应的字符 (这块有点绕口)
                if(flag_s != -1) {
                    sb_s.append(sb_s.charAt(flag_s));
                }else {
                    //没有相同字符,对标记先加1在加入sb对象中
                    sb_s.append(++count_s);
                }
                //有相同字符,那么sb对象就添加之前相同字符下标在sb对象中对应的字符 (这块有点绕口)
                if(flag_t != -1) {
                    sb_t.append(sb_t.charAt(flag_t));
                }else {
                    //没有相同字符,对标记先加1在加入sb对象中
                    sb_t.append(++count_t);
                }
            }
            //比较两个sb对象是否相同,相同返回true,否则返回false
            return sb_s.toString().equals(sb_t.toString());
        }
        //用于比较字符串是否包含字符,包含返回下标,不包含返回-1
        public static int isContainsCharacter(String s,char c) {
            for(int i = 0;i<s.length();i++) {
                if(s.charAt(i) == c)
                    return i;
            }
            return -1;
        }
  • 相关阅读:
    BZOJ 3262 cdq分治 OR 树套树
    Weekly Contest 132
    1007. Minimum Domino Rotations For Equal Row
    1002. Find Common Characters
    974. Subarray Sums Divisible by K
    926. Flip String to Monotone Increasing
    918. Maximum Sum Circular Subarray
    914. X of a Kind in a Deck of Cards
    907. Sum of Subarray Minimums
    900. RLE Iterator
  • 原文地址:https://www.cnblogs.com/du001011/p/10477645.html
Copyright © 2011-2022 走看看