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