字符串同构

思路:将待比较的字符串各自映射到两个整型数组,最后比较数组即可。

实现:建立一个ArrayList存放字符串,建立一个整型数组存放映射的整型数据。初始化映射整数为1

          遍历整个字符串,从0开始,如果ArrayList中不存在该字符,则将整型数据存入数组中,并将映射的整数加1,如果ArrayList中存在该字符,则获取整型数组中,与该字符对应的整数,并将其存入数组中;

例如:s1="add" 则实现后,对应的整型数组应该为[1 2 2];s2=“egg”,对应的整型数组也为[1 2 2],而s="paper",对应的整型数组为[1 2 1 3 4];

如果两个字符串对应的整型数组相等,则字符串同构

package com;


import java.util.*;

public class Isomorphic {
    public boolean isIsomorphic(String s, String t) {
        if(s.length()!=t.length()) return false;
        int m=1;
        int k=1;
        ArrayList s1=new ArrayList(s.length()) ;
        ArrayList t1=new ArrayList(t.length()) ;
        int [] s11=new int[s.length()];
        int[] t11=new int[t.length()];



        for(int i=0;i<s.length();i++){
            if (!s1.contains(s.charAt(i))){
                s1.add(s.charAt(i));
                s11[i]=m;
                m++;
            }else {
                s1.add(s.charAt(i));
                s11[i]=s11[s1.indexOf(s.charAt(i))];
            }
            if (!t1.contains(t.charAt(i))){
                t1.add(t.charAt(i));
                t11[i]=k;
                k++;
            }else {
                t1.add(t.charAt(i));
                t11[i]=t11[t1.indexOf(t.charAt(i))];
            }


        }
        for(int i=0;i<s11.length;i++){
            if (s11[i]!=t11[i]) return false;
        }




        return true;

    }

    public static void main(String[] args) {
        String s="add";
        String t="egg";
        String string="paper";
        String string1="title";
        String string2="mile";
        String string3="mkkl";

        System.out.println(new Isomorphic().isIsomorphic(s,t));
        System.out.println(new Isomorphic().isIsomorphic(string,string1));
        System.out.println(new Isomorphic().isIsomorphic(string2,string3));
    }
}

 

运算结果:true

                  true

                  false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值