211 字符串置换

原题网址:https://www.lintcode.com/problem/string-permutation/description

描述

给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。

置换的意思是,通过改变顺序可以使得两个字符串相等。

您在真实的面试中是否遇到过这个题?  

样例

"abc" 为 "cba" 的置换。

"aabc" 不是 "abcc" 的置换。

标签
排列
字符串处理
 
思路:只要判断两个字符串中相同字符数量是否一致就好,需要两个哈希表统计各自的字符及数量,然后对比。
 
AC代码:
class Solution {
public:
    /**
     * @param A: a string
     * @param B: a string
     * @return: a boolean
     */
    bool Permutation(string &A, string &B) {
        // write your code here
    int sizeA=A.size();
    int sizeB=B.size();
    if (sizeA!=sizeB)
    {
        return false;
    }
    map<char,int> m1;
    map<char,int> m2;
    for (int i=0;i<sizeA;i++)
    {
        if (m1.find(A[i])!=m1.end())//统计字符数量;
        {
            m1[A[i]]++;
        }
        else
        {
            m1[A[i]]=1;
        }
        if (m2.find(B[i])!=m2.end())//统计字符数量;
        {
            m2[B[i]]++;
        }
        else
        {
            m2[B[i]]=1;
        }
    }

    for (int i=0;i<sizeA;i++)
    {
        if (m1[A[i]]!=m2[A[i]])
        {
            return false;
        }
    }
    return true;
    }
};

 

还可以对两个字符串排序,然后比较排序后的字符串是否相等。参考:https://blog.csdn.net/qiujiahao123/article/details/77714776
 
 
posted @ 2018-06-16 14:30  eeeeeeee鹅  阅读(307)  评论(0编辑  收藏  举报