本文共 931 字,大约阅读时间需要 3 分钟。
题目:
给定两个字符串 str1 和 str2,如果你str1 和 str2 中出现的字符种类一样且每种字符出现的次数也一样,那么str1 和 str2 互为变形词。请实现函数判断两个字符串是否互为变形词。
举例:
str1 = “123”,str2 =“321” 返回“true”
str1 = “123”,str2 =“2331” 返回“false”
解答:
如果字符串 str1 和 字符串 str2 长度不同,直接返回false。如果长度相同,假设出现的字符串码值在 0~255 之间,那么先申请一个长度为 256 的整型数组 map,map[a]=b,代表字符编码为a的字符出现了b次,初始时map[0..255]的值都为0。然后遍历字符串str1,统计每种字符串出现的数量,比如遍历到 'a',其编码值为97,令map[97]++。这样 map 就成了 str1中每种字符的词频统计表。然后遍历字符串str2,每遍历一个字符串都在map中把词频减下来,比如遍历到字符‘a’,其编码值为97,则令map[97]--,如果减少之后的值小于0,直接返回 false,如果遍历完 str2,map中的值也没有出现负值,返回 true。
/** * 判断两个字符串是否互为变形词 */public class ZiFuChuan01 { public boolean isDeformmation(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
参考资料:《程序员面试代码指南》左程云 著
转载地址:http://spft.baihongyu.com/