《程序员代码面试指南》判断两个字符串是否互为变形词

题目:

给定两个字符串 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<chas1.length; i++){

                  map[chas1[i]]++;

            }

            for(int  i= 0; i<chas2.length; i++){

                  if(map[chas2[i]]-- == 0){

                        return false;

                  }

            }

            return true;

      }

参考资料:《程序员面试代码指南》左程云 著

猜你喜欢

转载自blog.csdn.net/young_1004/article/details/82429707
今日推荐