zoukankan      html  css  js  c++  java
  • 【3】确定两串乱序

    【题目】

    给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,且考虑字符串重点空格。
    给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。

    【代码实现】

    方法一:思想同方法三,但不用新建数据结构,而是用数组来统计字符次数,很有意思

    import java.util.*;
    
    public class Same {
        public boolean checkSam(String stringA, String stringB) {
           if (stringA.length() != stringB.length()){
               return false;
           }
            
            int[] arrs = new int[5000]; 
            char[] stringA_array = stringA.toCharArray();
            char[] stringB_array = stringB.toCharArray();
            
            //统计每个字符出现的次数
            for (char c : stringA_array){
                arrs[c]++;
            }
            
            //比较stringB_array字符次数是否一致
            for (int i = 0; i < stringB_array.length; i++){
                  char tempC = stringB_array[i];
                  //获取字符tempC对应的次数,并减去1.若对应的字符次数为0,则与字符串A中对应字符次数不一致
                    if(arrs[tempC]-- < 0){
                      return false;
                  }
            }
            return true;
            
            
        }
    }

    方法二:对字符排序比较

    import java.util.*;
    
    public class Same {
        public boolean checkSam(String stringA, String stringB) {
            if(stringA == null ||  stringB == null || stringA.length() <= 0 || stringB.length() <= 0)
                return false;
            if (stringA.length() != stringB.length()){
                return false;
            }
            char[] arrA = stringA.toCharArray();
            char[] arrB = stringB.toCharArray();
            //根据每个字符的ASCII码大小进行排序(空格也会被排序)
            Arrays.sort(arrA);
            Arrays.sort(arrB);
            
            return Arrays.equals(arrA, arrB);
        }
    }

    方法三:使用HashMap:

    链接:https://www.nowcoder.com/questionTerminal/164929d4acd04de5b0ee2d93047b3b20?toCommentId=535049
    来源:牛客网
    
    import java.util.*;
     
    public class Same {
        public boolean checkSam(String stringA, String stringB) {
                if(stringA == null ||  stringB == null || stringA.length() <= 0 || stringB.length() <= 0)
                return false;
            if(stringA.length() != stringB.length())
                return false;
             
            Map<Character, Integer> map = new HashMap<>();
            for(int i = 0; i < stringA.length(); i++){
                if(map.containsKey(stringA.charAt(i))){
                    map.put(stringA.charAt(i), map.get(stringA.charAt(i)) + 1);
                }else{
                    map.put(stringA.charAt(i), 1);
                }
            }
             
            for(int i = 0; i < stringB.length(); i++){
                if(map.containsKey(stringB.charAt(i))){
                    map.remove(stringB.charAt(i));
                }
            }
             
             
            if(!map.isEmpty()){
                return false;
            }
             
            return true;
        }
    }
  • 相关阅读:
    容器适配器————priority_queue
    容器适配器————queue
    容器适配器之总结
    序列式容器之总结
    序列式容器————forward_list
    序列式容器————list
    序列式容器————dequeue
    13.软件项目管理与敏捷方法——如何变更职责笔记
    10.软件项目管理与敏捷方法——沟通管理笔记
    09.软件项目管理与敏捷方法——人力资源管理笔记
  • 原文地址:https://www.cnblogs.com/noaman/p/6916874.html
Copyright © 2011-2022 走看看