242/Given two strings s and t, write a function to determine if t is an anagram of s.
For example,
s = “anagram”, t = “nagaram”, return true.
s = “rat”, t = “car”, return false.
中文翻译:
给出两个字符串s和t,写一个方法来判断t是否是s的回文数。
在做该题的时候,我是按照自己的思路来求解的,在按照自己的思路实现之后我又上网看别人的解题思路,发现自己做的有点复杂了。不过没事,又学到了一种解题思路!哈哈,挺喜欢这种感觉的! 好了,回归主题,先讲讲我的解法吧!
1.首先是先判断s和t的长度是否相等,如果不相等直接返回false
2.两个for循环顺序扫描s中的元素是否能在t中找到,如果s中的某个元素在t中存在,将t减去该元素得到新的t,继续执行下一个元素判断。
3.如果发现s中只要有一个元素在t中找不到就直接返回false并跳出循环。
4.如果循环完毕,s中的元素总能在t中找到,那就返回true。
完整实现的代码如下:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
bool isAnagram(string s, string t) {
if(!(s.length()-t.length()==0)) //判断输入的两个字符串长度是否相等
{
return false;
}
else
{
string::iterator s_it ;
string::iterator t_it ;
for(s_it = s.begin();s_it != s.end();s_it++)
{
for(t_it = t.begin();t_it != t.end();t_it++)
{
if(*t_it == *s_it) //如果t中有与其相同的元素,删除t中对应的元素,跳出本次循环
{
t.erase(t_it);
break;
}
if(t_it == t.end()-1)//如果在t中找不到与其相同的元素,返回false,跳出循环
{
return false;
break;
}
}
}
if(t.length()==0)
{
return true;
}
}
}
};
/*
写了个main函数用来测试了下
void main()
{
Solution a;
string t,s;
cin>>t>>s;
if(a.isAnagram(t,s))
cout<<"true"<<endl;
else
cout<<"false"<<endl;
}
*/
哈哈,是不是好low啊!
再说说网上的解题思路:
先对两个字符串分别进行排序再进行对比!(开始还真没想到哈,就是喜欢这种感觉)
我的实现代码如下:
class Solution {
public:
bool isAnagram(string s, string t) {
if(!(s.length()-t.length()==0)) //判断输入的两个字符串长度是否相等
{
return false;
}
else
{
sort(s.begin(),s.end());//将s进行排序
sort(t.begin(),t.end());//将t进行排序
if(s==t)
{
return true;
}
else
{
return false;
}
}
}
};