一个题目。。
给定两个字符串如果字符串中的字符出现的次数相同,则认为两字符串相等。
如“aab”和“aba”相等。
如何高效的实现。
------解决方案--------------------最起码要遍历这两个字符串吧,O(n),这一步骤可以声明两个长度为255的数组,盛放这些字母的出现次数,然后看一下这两个数组的内容。想不起来更高效的了。
------解决方案-------------------- int i=0,j=0,k;
boolean same = false;
String a = new String("aaab");
String b = new String("baaa");
for(k=(int)'a';k<=(int)'z';k++)
{
i=0;
while(i<a.length)
{
if((int)a[i] == k)
{
i++;
}
}
j=0;
while(j<b.length)
{
if((int)b[j] == k)
{
j++;
}
}
if(i == j)
{
same =true;
break;
}
}
if(same)
{
System.out.println("same");
}
一种思路
------解决方案--------------------
------解决方案--------------------字符串是有一个个字符拼起来的!既然如此我们一样可以把他们拆成一个个字符!
去对比这一个个字符不就可以啦!~具体实现还是LZ自己去做吧……
------解决方案--------------------期待解决。
------解决方案--------------------最简单的思路就是,将两个字符串排序,然后进行比较。
------解决方案--------------------高效的实现还真不知道
帮顶吧
------解决方案--------------------拆串前先判断两个字符串是否长度一样
------解决方案--------------------我也感觉先判断长度,如果长度不等就就不相等了,如果长度相等了在分别计算其个数,这样的情况下对于长度不等的情况下是高效的,但是对于真的相等就不行了!
------解决方案--------------------学习中,等高手解决问题
------解决方案--------------------比较字符串长度。挺好。
------解决方案--------------------各位大大请指正!
Java code
public static void main(String[] args)
{
String s1 = "bbb";
String s2 = "aba";
if (f(s1).equals(f(s2)))
{
System.out.println("相等");
}
else
{
System.out.println("不相等");
}
}
static Map f(String s)
{
Map m = new HashMap();
char c;
int con;
for (int i = 0; i < s.length(); i++)
{
c = s.charAt(i);
con = null == m.get(s) ? 0 : (Integer)m.get(s);
m.put(s.charAt(i), con + 1);
}
return m;
}
------解决方案--------------------
------解决方案--------------------
LZ的要求如果纯是英文字母还好搞一些, 要支持Unicode吗?比如是"我不爱?"要等于"不爱我?"
------解决方案--------------------
学习了~~
------解决方案--------------------
正则可以啊
------解决方案--------------------
如果只有ASCII码,一楼的算法应该是最高效的.
如果字符串中还有其它字符.用HashMap来统计字符的重复次数,效率应该不错.HashMap查找一个元素并统计的时间复杂度为O(1).用HashMap来统计,这样的算法论坛中多次曾多次出现。