确定两个字符串是否接近

class Solution {
public:
    bool closeStrings(string word1, string word2) {
        int len1 = word1.size(); 
        int len2 = word2.size();
        if (len1 != len2) {  //长度不相等时,两个字符串一定不接近
            return false;
        }
        else {
            const char* c = new char[word1.size()];  //动态创建两个字符数组存储字符串
            const char* d = new char[word2.size()];
            c = word1.data();  //将字符串强制转换成字符数组
            d = word2.data();
            int a[26] = { 0 }; //定义整形数组存储每个字母出现的次数
            int b[26] = { 0 };
            int t;
            for (int i = 0; i < word1.size(); i++) {
                t = c[i] - 'a';  //将每个字母转换成数字存储
                a[t]++;  //1-26个字母对应a【0】-a【25】
            }
            for (int i = 0; i < word2.size(); i++) {
                t = d[i] - 'a';
                b[t]++;
            }
            int count = 0;
            for (int i = 0; i < 26; i++) {
                if (a[i] == 0 && b[i] != 0 || (a[i] != 0 && b[i] == 0)) { //两个字符串中有其中一个出现另一个字符串没有的字母时,一定不符合
                    return false;
                }
            }
            int flag = 0;
            for (int i = 0; i < 26; i++) {
                flag = 0;
                for (int j = 0; j < 26; j++) {
                    if (a[i] == b[j]) {  //判断两个字符串是否有出现次数相同的字母
                        a[i] = -1; 
                        b[j] = -1;
                        flag = 1; //用flag标记是否符合条件
                        break;
                    }
                }
                if (flag == 0) { 
                    return false;
                }
            }
            return true;
        }
    }
};

整体的思路是判断字符串中每个字母出现的次数在另一字符串中是否有相同出现次数的字母,且两个字符串出现的字母是否相同。

你可能感兴趣的:(算法,leetcode)