특정 문자 통계 의 두 가지 알고리즘

1885 단어 알고리즘
질문
You're given strings J representing the types of stones that are jewels, and S representing the stones you have.  Each character in S is a type of stone you have.  You want to know how many of the stones you have are also jewels.
The letters in J are guaranteed distinct, and all characters in J and S are letters. Letters are case sensitive, so "a" is considered a different type of stone from "A".
Note: • S and J will consist of letters and have length at most 50. • The characters in J are distinct.
 
직접 찾기
//max_n1 J       ,max_n2 S       

int JewelsNum_1(const char *J,int max_n1,const char *S,int max_n2)
{
    int i = 0,j,num=0;
    while(S[i]!='\0' && i

 
해시 찾기:
int JewelsNum_2(const char *J,int max_n1,const char *S,int max_n2)
{
    int i = 0,num=0,all[52] = {
        0
    };
    char temp = '\0';
    temp = S[i];
    while(temp!='\0' && i='a' && temp<='z')
        {
            all[temp-'a']++;
        }
        else if(temp>='A' && temp<='Z')
        {
            all[temp-'A'+26]++;
        }
        else;
        i++;
        temp = S[i];
    }
    i = 0;
    temp = J[i];
    while(temp!='\0' && i='a' && temp<='z')
        {
            num = num + all[temp-'a'];
        }
        else if(temp>='A' && temp<='Z')
        {
            num = num + all[temp-'A'+26];
        }
        else;
        i++;
        temp = J[i];
    }
    return num;
}

요약:
직접 알고리즘 최 악의 경우 시간 복잡 도 는 m * n 이 고 해시 알고리즘 최 악의 경우 시간 복잡 도 는 m + n 입 니 다.

좋은 웹페이지 즐겨찾기