1.3问题:
给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
方法一:
import java.util.*;
public class sort{
public static void main(String args[]){
String s = new String("abcdaefghijklmnopqrstuvwxzya");
String t = new String("abcdefghijklmanopqrstuvwxyzb");
s=sort(s);
t=sort(t);
if(permutation(s,t)){
System.out.println("变为词");
}
else
System.out.println("非变位词");
}
/*确认细节:是否区分大小写,是否考虑空格*/
/*这个算法不算最优,但是思路清晰易懂:先排序,再比较字串*/
public static String sort(String s){
char[] content=s.toCharArray();/*字符串转字符数组*/
java.util.Arrays.sort(content);/*字符排序*/
return new String(content);/*在原有字符串基础上新建一个一样的字符串并返回。*/
}
public static boolean permutation(String s,String t){
if(s.length()!=t.length()){/*比较字符串长度*/
return false;
}
return sort(s).equals(sort(t));/*比较两个字符串返回true false true */
}
}
import java.util.*;
public class sort{
public static void main(String args[]){
String s = new String("abcdaefghijklmnopqrstuvwxzya");
String t = new String("abcdefghijklmanopqrstuvwxyzb");
if(permutation(s,t)){
System.out.println("变为词");
}
else
System.out.println("非变位词");
}
/*确认细节:是否区分大小写,是否考虑空格*/
/*统计每个字符出现的次数,然后比较这两个数组*/
public static boolean permutation(String s,String t){
if(s.length()!=t.length()){
return false;
}
int[] letters = new int[256];//假设条件
char[] s_array=s.toCharArray();
for(char c:s_array){
letters[c]++;
}
for(int i=0;i<t.length();i++){
int c =(int)t.charAt(i);
if(--letters[c]<0){
return false;
}
}
return true;
}
}