如何判断组成两个字符串的字母是完全一样的

如题所述

相同的字符组成是指组成两个字符串的字母以及各个字母个数是一样的,只是排列顺序不同而已。
方法一:排序法(最容易想到的方法是对两个字符串中的字符进行排序,比较两个排序后的字符串是否相等。若相等,则表明他们是由相同的字符组成的,否则,则表明他们是由不同的字符组成的)时间复杂度
import java.util.Arrays;
public class Test {
public static void main(String args[]){
String s1="aaaabbc";
String s2="abcbaaa";
compare(s1,s2);
s1="aaaabbc";
s2="abcbaab";
compare(s1,s2);
}

public static void compare(String s1,String s2){
byte[] b1 = s1.getBytes();
byte[] b2 = s2.getBytes();
Arrays.sort(b1); //对byte类型的字符进行排序,时间复杂度最快也是O(nlogn)
Arrays.sort(b2);
s1=new String(b1);
s2=new String(b2);
if(s1.equals(s2))
System.out.println("equal");
else
System.out.println("not equal");
}
}

方法二:空间换时间(在算法设计中,经常会采用空间换时间的方法以降低时间复杂度,即通过增加额外的存储空间来达到优化算法的效果)
å°±
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-10-23

用指针实现吧:
你可以现定义两个指针,让第一个指针指向第一个字符串,第二个指向第二个字符串,让后笔记第一与第二个指针的内容是否相同。如果相同,两个指针都向后移一位,否则返回0(不相同)。大概思路就是这样

数组实现:

int num[26];
int len = str(A);
for(int i=0;i<len;i++)
num[str[i]-'a']++; 
这个代码计算每个字母的出现次数
for(int i=0;i<26;i++)
if(num1[i]!=num2[i]) 不完全相同

第2个回答  2017-10-23
我只能给一个思路,其他的你自己来吧。这一个函数你首先需要剔除不和格式的字符,之后需要排序字符串,然后比较即可。你说不让用STL,我于是懒得编写。
第3个回答  2018-05-25

相似回答