str1='"123" str2 ="231" true
str1="123" str2="12231" false
这个题目不难,考察代码实现能力
首先判断长度
然后 利用字符编码 最大255 申请一个整型数组map(初始化为0哈)
然后 遍历字符串str1 遍历到 就在相应的 字符编码位置 +1
然后 遍历字符串str2 遍历到的就-1 如果减少之后发现小于0 了 直接返回false
如果遍历完str2 没有出现负值 则返回true
思路很重要!后面还会陆陆续续提到这种思路去解题
上代码:
package TT; public class Test1 { public static boolean isDeformation(String str1 ,String str2){ if(str1==null || str2 ==null ||str1.length() != str2.length()){ return false; } char[] chas1 = str1.toCharArray(); char[] chas2 = str2.toCharArray(); int[] map = new int[256]; for(int i =0 ;i <chas1.length; i++){ map[chas1[i]]++; } for(int i =0; i<chas2.length; i++){ if((map[chas2[i]]--) ==0){ return false; } } return true; } public static void main(String[] args){ String str1 ="123"; String str2 = "231"; boolean b = isDeformation(str1, str2); System.out.println(b); } }
我的之前的实现:
public class Test2 { public static boolean isChangeWord(String str1, String str2) { if (str1.length() !=str2.length()) { return false; } int[] arr = new int[256]; for(int i =0; i<str1.length();i++) { arr[str1.charAt(i)]++; } for(int i=0; i<str2.length(); i++) { arr[str2.charAt(i)]--; } for (int i = 0; i < arr.length; i++) { if (arr[i] != 0) { return false; } } return true; } public static void main(String[] args) { String str1 ="abcdef"; String str2 ="abcdfe"; boolean changeWord = isChangeWord(str1, str2); System.out.println(changeWord); } }
考察撸代码的能力:
public class t2 { public static boolean isChange(String s1, String s2){ if(s1 == null || s2 == null){ return false; } if (s1.length() != s1.length()){ return false; } //申请数组并且赋值为0 char[] temp = new char[225]; for (int i=0; i<temp.length; i++){ temp[i]=0; } //遍历第一个字符串,并且根据情况给数组赋值 for ( int i=0; i<s1.length(); i++){ temp[s1.charAt(i)]++; } //遍历第二个 for (int i= 0; i<s2.length(); i++){ temp[s2.charAt(i)]--; } //遍历结果 for (int i=0; i<temp.length; i++){ if (temp[i] != 0){ return false; } } return true; } public static void main(String[] args){ String s1 = "1234"; String s2 = "1433"; System.out.println(isChange(s1, s2)); } }