互为变形词

来源:互联网 发布:centos中文输入法切换 编辑:程序博客网 时间:2024/06/08 11:42

对于两个字符串AB,如果AB中出现的字符种类相同且每种字符出现的次数相同,则AB互为变形词,请设计一个高效算法,检查两给定串是否互为变形词。

给定两个字符串AB及他们的长度,请返回一个bool值,代表他们是否互为变形词。

测试样例:

"abc",3,"bca",3

返回:true


思路:创建一个ascii码数组表,出现置为1,再讲两个字符串的ascii码数组表进行比较即可。


class Transform {public:    bool chkTransform(string A, int lena, string B, int lenb) {        const char *pA=A.c_str();        const char *pB=B.c_str();        int arr[256]={0};        while(*pA){            arr[*pA]=1;            pA++;        }        while(*pB){            if(arr[*pB]!=1)                return false;            pB++;        }        return true;    }};


class Transform {public:    bool chkTransform(string A, int lena, string B, int lenb) {        if(lena!=lenb)            return false;        int len=lena;        vector<int> v(128,0);        for(int i=0;i<A.size();i++)            v[A[i]]++;        for(int i=0;i<B.size();i++){            if(v[B[i]]!=0)                v[B[i]]--;        }        for(int i=0;i<128;i++){            if(v[i]!=0)                return false;        }        return true;    }};


import java.util.*; public class Transform {    public boolean chkTransform(String str1, int a, String str2, int b) {        if (str1 == null || str2 == null || str1.length() != str2.length()) {            return false;        }        char[] chas1 = str1.toCharArray();        char[] chas2 = str2.toCharArray();        int[] map = new int[256];        for (int i = 0; i < chas1.length; i++) {            map[chas1[i]]++;        }        for (int i = 0; i < chas2.length; i++) {            if (map[chas2[i]]-- == 0) {                return false;            }        }        return true;    }}