当前位置:网站首页>【字符串】变形词

【字符串】变形词

2021-01-23 22:05:16 丁不煮

* 变形词问题
 * 变形词,即两个具有相同的字符及数量的串。
 * 问题:给定两个字符串,编写程序,确定其中一种一个字符串的字符重新排列后,能否变成另一个字符。
 * 返回bool,代表两串是否重新排列后可以相同。
 * 思路:
 * 方法1:将字符串转换成字符数组,然后排序字符数组,利用Arrays的equal功能判断是否相等。
 * 方法2:开辟新的辅助空间,即256的整型数组,做计数使用。
 * 扫描字符串1,将其中出现的字符转换为ASCII值,对应的辅助数组上+1;
 * 扫描字符串2,将其中出现的字符转换为ASCII值,对应的辅助数组上-1;
 *     如果做减法之后为负数,直接返回false;
 * 扫描辅助数组,有大于0的数值出现,直接返回false

 

 1 private static boolean checkSame1(String str1, String str2) {
 2         int len1=str1.length();
 3         int len2=str1.length();
 4         if(len1!=len2)
 5             return false;
 6         char []arr1=str1.toCharArray();
 7         char []arr2=str2.toCharArray();
 8         Arrays.sort(arr1);
 9         Arrays.sort(arr2);
10         
11         
12         return Arrays.equals(arr1, arr2);
13     }
方法1

 

 1 private static boolean checkSame2(String str1, String str2) {
 2         int len1=str1.length();
 3         int len2=str1.length();
 4         if(len1!=len2)
 5             return false;
 6         
 7         int []helper=new int [256];
 8         //将串1的元素对应到辅助数组中;
 9         for (int i = 0; i < len1; i++) {
10             char c=str1.charAt(i);
11             helper[c]++;
12         }
13         //将串2的元素在helper的对应位置减掉
14         for (int i = 0; i < len2; i++) {
15             char c=str2.charAt(i);
16             helper[c]--;
17             if(helper[c]<0)
18                 return false;
19         }
20         for (int i = 0; i < helper.length; i++) {
21             if(helper[i]>0)
22                 return false;
23             return true;
24 }
25         return true;
26     }
方法2

 

1     public static void main(String[] args) {
2         String str1 = "aa bcde fagq";
3         String str2 = "aa bdce fagy";
4         boolean res=checkSame2(str1, str2);
5         System.out.println(res);
6         
7     }
主函数

版权声明
本文为[丁不煮]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/dfglind/p/14319178.html

随机推荐