C++文字列が変形語であるか否かを判断


  • 考え方
  • 遍歴文字列a
  • aにおける各文字の出現回数
  • を計算する.
  • bにおける同一文字の出現回数を算出する
  • 比較
  • 注意:
  • のいずれかの文字列が空でfalseを返します.
  • の2つの文字列の長さは等しくなく、falseを直接返すことができます.

  • 複雑度率が高いn*n、複雑度を下げる方法:
  • ハッシュ・テーブルを使用して、文字と出現回数を記録します.
  • 配列またはコンテナを使用し、acsII個数は256であり、256の空間を申請すればよく、文字の出現回数を記録する.


  • /*   :        str1 str2,  str1 str2                        ,  str1 str2     。                    。  : str1 = "123" ,str2 = "231" ,  true str1 = "123" ,str2 = "2331" ,  false */
    //     :
    bool f(char *str1,char *str2)//  str1 str2     
    {
    
        if (strlen(str1)!=strlen(str2))
        {
            return 0;
        }
        if (*str1=='\0'||*str2=='\0')
        {
            return 0;
        }
        while(*str1 != '\0')
        {
            if (c_time(str1,*str1)!=c_time(str2,*str1))
            {
                return 0;
            }
            str1++;
        }
    
    
        return 1;
    }
    int c_time(char *str,char c)//  c str       
    {
        int sum = 0;
        if (!str)
        {
            return sum;
        }
        while(*str != '\0')
        {
            if (*str == c)
            {
                sum++;
            }
            str++;
        }
    
        return sum;
    }