提示
LintCode中的相关算法题实现代码,可以在我的GitHub中下载。
题目需求
写出一个函数 anagram(s, t)
判断两个字符串是否可以通过改变字母的顺序变成一样的字符串。
样例
给出 s = "abcd"
,t="dcab"
,返回 true
.
给出 s = "ab"
, t = "ab"
, 返回 true
.
给出 s = "ab"
, t = "ac"
, 返回 false
.
挑战
O(n) time, O(1) extra space
解题思路
由于是字母,那么就有256个,可以使用数组,将一个字符的个数计算,然后另一个减一下,看数组中是否有数组内不为0,那么就不能,否则可以。
实现代码
class Solution {
public:
/**
* @param s: The first string
* @param t: The second string
* @return: true or false
*/
bool anagram(string &s, string &t) {
// write your code here
if(s.size()==0&&t.size()==0) return true;
else if(s.size()!=0&&t.size()==0) return false;
else if(s.size()==0&&t.size()!=0) return false;
else if(s.size()!=t.size()) return false;
int a[256]={0};
for(int i=0;i<s.size();i++)
{
a[s[i]-'0']++;
}
for(int i=0;i<t.size();i++)
{
a[t[i]-'0']--;
}
for(int i=0;i<256;i++)
{
if(a[i]!=0)
{
return false;
}
}
return true;;
}
};