电脑企业2013笔试题,求高手持续加精
计算机企业2013笔试题,求高手持续加精!
请教个问题
下列函数findchar的参数str是一字符串,该字符串中只有一个字符是单独出现的,其他字符都是成对出现,例如“acdbdgfcfag”,该函数返回字符串中单独出现的那个字符。要求写一个尽可能低的时间复杂度的算法。
char findchar(char *str) { }
请问如何实现一个低于O(N^2)的方法?
------解决方案--------------------
整个串异或,结果就是多出来的那个
印象中见过类似的题
------解决方案--------------------
char szRet=str[0];
for (int i =1;i< strlen(str);i++)
szRet^=str[i];
return szRet;
------解决方案--------------------
对的。因为异或运算满足交换律和结合律,可以把顺序调整成(aa)(bb)(cc)这样成对,每对结果都是0
请教个问题
下列函数findchar的参数str是一字符串,该字符串中只有一个字符是单独出现的,其他字符都是成对出现,例如“acdbdgfcfag”,该函数返回字符串中单独出现的那个字符。要求写一个尽可能低的时间复杂度的算法。
char findchar(char *str) { }
请问如何实现一个低于O(N^2)的方法?
计算机
算法
------解决方案--------------------
整个串异或,结果就是多出来的那个
印象中见过类似的题
------解决方案--------------------
char szRet=str[0];
for (int i =1;i< strlen(str);i++)
szRet^=str[i];
return szRet;
------解决方案--------------------
对的。因为异或运算满足交换律和结合律,可以把顺序调整成(aa)(bb)(cc)这样成对,每对结果都是0