这是一道相对容易的题,但通过率却不高,题目如下:
写出一个函数 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) ;
}