开发者社区> 问答> 正文

Java 如何判断一个字符串是一个字符串打乱顺序后的字符串

`a="laliyunnet"; b="descntn" ---> return true
a="hello"; b="oelhg" --->return false`

展开
收起
蛮大人123 2016-03-23 14:54:47 3855 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    算法思想:首先两个字符串长度必须相等;其次,目标串中的各个字符必须都包含在原串中;
    第三,目标串种各个字符的个数必须跟原串中对应字符的个数一样。
    实例代码:

     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);
        }
    }
    2019-07-17 19:11:08
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载