最近在lintcode上刷题,遇到这一问题。
问题描述:
给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。
置换的意思是通过改变顺序可以使得两个字符串相等。
输入样例:
"abc" 为 "cba" 的置换。
"abbc" 不是 "abcc" 的置换。
解决思路:
可通过排序来解决此问题,将其转换为字符数组,首先判断字符串长度是否相等,如果不相等则不是置换,二是判断为空字符串这一特殊情况,最后可通过Arrays.sort()这一方法对数组进行排序,比较这两个数组是否相等。如果相等,则为置换,如果不相等,则不是置换
1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class Main { 5 6 public static void main(String[] args) { 7 Scanner in = new Scanner(System.in); 8 while(in.hasNext()){ //多组数据输入 9 String str1 = in.next(); //输入字符串str1 10 String str2 = in.next(); //输入字符串str2 11 boolean x = Main.f(str1, str2); //调用函数 12 if(x==true){ 13 System.out.println("str1是str2的置换"); 14 } 15 else{ 16 System.out.println("str1不是str2的置换"); 17 } 18 } 19 } 20 public static boolean f(String s1,String s2){ //判断是否为置换的函数 21 char ch1[] = s1.toCharArray(); //转换为字符数组 22 char ch2[] = s2.toCharArray(); 23 if(s1.length()!=s2.length()){ //判断长度是否相等 24 return false; 25 } 26 if(s1.equals("")&&s1.equals("")){ //判断空字符串这一特殊情况 27 return true; 28 } 29 Arrays.sort(ch1); //数组排序 30 Arrays.sort(ch2); 31 boolean m = true; 32 int j=0; 33 for(int i=0;i<s1.length();i++){ //比较排序后的数组是否相等 34 if(ch1[i]!=ch2[j]) 35 m = false; 36 j++; 37 } 38 return m; 39 } 40 }
时间: 2024-10-25 22:05:20