a="csdnnet"; b="descntn" ---> return true
a="hello"; b="oelhg" --->return false
Java 如何更好地判断一个字符串是一个字符串打乱顺序后的字符串
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
关注 算法思想:首先两个字符串长度必须相等;其次,目标串中的各个字符必须都包含在原串中;
第三,目标串种各个字符的个数必须跟原串中对应字符的个数一样。
实例代码:import java.util.HashMap; import java.util.Map; public class StringOrderUtil { public static boolean isScrambledString(String source,String target){ if(source==null||target==null){ throw new IllegalArgumentException("source or target is null."); } if(source.length()!=target.length()){ System.out.println("target string's length is not equal to source length."); return false; } //目标串中每个字符都包含在原串中 int length = source.length(); Map<Character,Integer> targetCount = new HashMap<Character,Integer>(); for(int i =0;i<length;i++){ char c = target.charAt(i); //target中某个字符不在原串中,返回false int indexOfSource = source.indexOf(c); if(indexOfSource==-1){ return false; } //统计该串在本串中的个数 if(targetCount.get(c)==null){ targetCount.put(c, 1); }else{ Integer count = targetCount.get(c); targetCount.put(c, 1+count); } } //统计原串中各个字符的个数 Map<Character,Integer> sourceCount = new HashMap<Character,Integer>(); for(int i =0;i<length;i++){ char c = source.charAt(i); if(sourceCount.get(c)==null){ sourceCount.put(c, 1); }else{ Integer count = sourceCount.get(c); sourceCount.put(c, 1+count); } } //目标串中每个字符个数跟原串中对应字符的个数一样 for(Map.Entry<Character, Integer> entry:targetCount.entrySet()){ Character key = entry.getKey(); if(entry.getValue()!=sourceCount.get(key)){ return false; } } //目标串中的每个元素都在原串中,且对应个数相同 return true; } public static void main(String[] args) { String a = "csdnnet"; String b = "descntn"; boolean result = isScrambledString(a,b); System.out.println(result); //个数不同 b = "descnnn"; result = isScrambledString(a,b); System.out.println(result); } }
测试通过,OK。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 截图中的mathematics程序转换成matlab
- ¥15 动力学代码报错,维度不匹配
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 報錯:Person is not mapped,如何解決?
- ¥15 c++头文件不能识别CDialog