【字符串】變形詞

* 變形詞問題
 * 變形詞,即兩個具備相同的字符及數量的串。
 * 問題:給定兩個字符串,編寫程序,肯定其中一種一個字符串的字符從新排列後,可否變成另外一個字符。
 * 返回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     }
主函數
相關文章
相關標籤/搜索