这是一道相对容易的题,但通过率却不高,题目如下:
写出一个函数 anagram(s,
t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串。
样例
给出 s = "abcd",t="dcab",返回 true.
给出 s = "ab", t = "ab",
返回 true.
给出 s = "ab", t = "ac",
返回 false.
解题时产生一个思路:
这种无规律位置的题目,用位置索引处理显然不明智的。其实,这题目可以看成验证字符的唯一性问题,只是字符并不确定是唯一而已。既然如此,那么用int的所有位来标记显然已经足够标记ascii的26个字母,其他的字符大家可以自己适当调节位的总数。至于字符的重复性,只需要制定进位即可。
思路一代码实现如下:
int Method(char *s,int slen,char *w,int wlen)
{
int ms=0,mw=0,i=0;
if(slen!=wlen)return 0;
for(;i<slen;++i)
{
ms+=1<<(s[i]-'a');
mw+=1<<(w[i]-'a');
}
return !(ms^mw) ;
}
本文介绍了一种判断两个字符串是否可以通过改变字母顺序变成相同字符串的方法。利用int类型变量的位操作特性,通过对字符进行位运算,实现了高效判断两字符串是否为变位词的功能。
8644





