题目描述:
假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,比如:abcda和adabc,
由于出现的字符个数都是相同,只是顺序不同,所以这两个字符串是匹配的。
要求高效实现下面的函数: boolen IsMatch(const char *str1, const char *str2)
给出代码(主要思想看代码即知):
bool IsMatch(const char *str1, const char *str2) { if( str1==NULL || str2 == NULL ) return false; unsigned int counter[128]={0}; while(*str1!='\0') counter[*str1++]++; while(*str2!='\0') { counter[*str2++]--; if( counter < 0 ) return false; } for( int i=0; i<255; i++ ) if( counter[i] != 0 ) return false; return true; }
上述代码,需要对str1进行一次完整遍历,对str2在最坏情况下需要进行一次完整遍历(大多是str1和str2匹配的情况),
所以一般只需对str2进行部分遍历就可以了,时间复杂度O(N)