zoukankan      html  css  js  c++  java
  • String 经常用法最优算法实现总结 (二)

    1. String getOrderedString(boolean isDuplicated, String … str)

    说明:

     Orders all characters in the input strings and return the ordered string.(note: only considering the alphabets and digits) 
    i.e:
    (false, {"ahcdx", "abcuy", "cejm"}) ->"abcdehjmuxy"
    (true, {"ahcdx", "abcuy", "cejm"}) ->"aabcdehjmuxy"


    /**
         * Orders all characters in the input strings without duplicated str.
         * 
         * @Title: getOrderedString
         * @param isDuplicated true/false
         * @param str input str
         * @return ordered string
         */
        public static String getOrderedString(boolean isDuplicated, String... str) {
            if (str == null || str.length == 0) {
                return null;
            }
    
            // initialize array
            int[] charArrayTmp = new int[MAX_CHAR_LENGTH];
            System.arraycopy(CHARARRAY, 0, charArrayTmp, 0, MAX_CHAR_LENGTH);
    
            int length = str.length;
            String value = null;
            int valueLength = 0;
            char tempValue;
            int totalCounts = 0;
    
            // merge and sort the input strs
            for (int i = 0; i < length; i++) {
                value = str[i];
                valueLength = value.length();
                totalCounts += valueLength;
    
                for (int j = 0; j < valueLength; j++) {
                    tempValue = value.charAt(j);
    
                    if (isDuplicated) {
                        charArrayTmp[tempValue] += 1;
                    } else {
                        charArrayTmp[tempValue] = 1;
                    }
    
                }
            }
    
            char[] newChar = new char[totalCounts];
            int counts = 0;
            int len = 0;
            // append result that has been merged and sorted
            for (int i = MIN_CHAR_LENGTH; i < MAX_CHAR_LENGTH; i++) {
                len = charArrayTmp[i];
    
                if (len != 0) {
                    for (int j = 0; j < len; j++) {
                        newChar[counts++] = (char) i;
                    }
                }
    
            }
            return new String(newChar, 0, counts);
        }


    2.  List<String> getMostLongDifferent(String str)
    说明:
    Returns the longest consecutive different substring.
    i.e: 
    ("abcabefg") -> "cabefg"

        /**
         * @Description: get the longest consecutive different substring.
         * @Title: getMostLongDifferent
         * @param str input string
         * @return the longest consecutive different substring of input
         */
        public static List<String> getMostLongDifferent(String str) {
            if (isEmpty(str)) {
                return null;
            }
            int len = str.length();
            Map<Character, Integer> cursor = new HashMap<Character, Integer>();
            cursor.put(str.charAt(0), 0);
            int[] lengthAt = new int[len];
            lengthAt[0] = 1;
            int max = 0;
            for (int i = 1; i < len; i++) {
                char cha = str.charAt(i);
    
                if (cursor.containsKey(cha)) {
                    lengthAt[i] = Math.min(lengthAt[i - 1] + 1, i - cursor.get(cha));
                } else {
                    lengthAt[i] = lengthAt[i - 1] + 1;
                }
                max = (max >= lengthAt[i]) ? max : lengthAt[i];
                cursor.put(cha, i);
            }
    
            List<String> resultList = new ArrayList<String>();
            for (int i = 0; i < len; i++) {
                if (max == lengthAt[i]) {
                    String resultString = str.substring(i - max + 1, i + 1);
                    if (!resultList.contains(resultString)) {
                        resultList.add(resultString);
                    }
                }
            }
            return resultList;
        }

    3. String normalizeSpace(String str)
    说明:
    Remove leading and trailing whitespace and then replacing sequences of whitespace characters by a single space.

    /**
         * Remove leading and trailing whitespace and then replacing sequences of whitespace characters.
         * by a single space
         * 
         * @param str the string need to be normalize space
         * @return string result after normalize space
         */
        public static String normalizeSpace(String str) {
            if (str == null) {
                return null;
            }
    
            str = str.trim();
    
            if (str.length() <= 3) {
    			return str;
    		}
            
            if (str.indexOf(CommonConstants.DOUBLE_BLANKS, 1) >= 0) {
            	char[] chars = str.toCharArray();
                int index = 0;
                
    	        for (int i = 0, len = chars.length; i < len; i++) {
    	            if (chars[i] != CommonConstants.CHAR_BLANKS || chars[i - 1] != CommonConstants.CHAR_BLANKS) {
    	                chars[index++] = chars[i];
    	            }
    	        }
    	        
    	        return new String(chars, 0, index);
            } else {
    			return str;
    		}
        }




  • 相关阅读:
    JavaCore和HeapDump 规格严格
    日志输出(转) 规格严格
    Assert理解(51cto) 规格严格
    Telnet工具 规格严格
    Java工具应用(转老外) 规格严格
    杂项选用 规格严格
    What means the errormessage 'java.lang.OutOfMemoryError: GC overhead limit exceeded' in Java? 规格严格
    如何才能让你的SQL运行得更快
    如何才能让你的SQL运行得更快
    关于-非法的xml字符
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6850573.html
Copyright © 2011-2022 走看看