腾讯的一道面试题??欢迎讨论
假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同,所以这两个字符串是匹配的。。要求高效现在需要你来实现下面的函数:
boolen Is_Mach(char *str1,char *str2)
大家来讨论讨论吧,我觉得这个比较有意思,电子词典中就存在相似的问题。。
我想了好久也只想到一些基本的方法,效率也不高,还请大家来晒晒自己的方法吧???
#include<iostream> #include<cassert> #include<cstring> bool is_Match(const char * str1 , const char * str2) { assert( NULL != str1 && NULL != str2); if ( strlen( str1) != strlen( str2 ) ) { return false; } int ret = static_cast<int>(str1[0]); for ( int i=1 ; str1[i] != '\0' ; i ++) { ret ^= static_cast<int>(str1[i]); } for ( int i = 0; str2[i] != '\0' ; i ++) { ret ^= static_cast<int>(str2[i]); } return ret == 0 ? true:false; } int main() { const char *str1 = "abc"; const char *str2 = "cba"; if (! is_Match(str1,str2) ) { std::cout<<"Do not Matches"<<std::endl; } return 0; }