LeetCode 1309:Decrypt String from Alphabet to Integer Mapping

LeetCode:1309
標籤:String
難度:Easy

 

public class LeetCode1309 {
	/*
	 * Easy
	 * 1309. Decrypt String from Alphabet to Integer Mapping
	 * Given a string s formed by digits ('0' - '9') and '#' . 
	 * We want to map s to English lowercase characters as follows:
	 * Characters ('a' to 'i') are represented by ('1' to '9') respectively.
	 * Characters ('j' to 'z') are represented by ('10#' to '26#') respectively. 
	 * Return the string formed after mapping.
	 * It's guaranteed that a unique mapping will always exist.
	 * 
	 * Example 1:
	 * Input: s = "10#11#12"
	 * Output: "jkab"
	 * Explanation: "j" -> "10#" , "k" -> "11#" , "a" -> "1" , "b" -> "2".
	 * 
	 * Example 2:
	 * Input: s = "1326#"
	 * Output: "acz"
	 * 
	 * Example 3:
	 * Input: s = "12345678910#11#12#13#14#15#16#17#18#19#20#21#22#23#24#25#26#"
	 * Output: "abcdefghijklmnopqrstuvwxyz"
	 */
    public static void main(String[] args) {
		
//      System.out.println((char)65); char 'A'
//      System.out.println((char)97); char 'a'
		
        System.out.println(otherAnswer("12345678910#11#12#13#14#15#16#17#18#19#20#21#22#23#24#25#26#"));
    }

    public static String freqAlphabets(String s) {
    	StringBuffer res = new StringBuffer();
    	int endSubStringIndex = 3;
    	int tmpIndex = 2;
    	int startCharValue = 96;
    	for(int i = 0 ; i < s.length() ; i++) {
    		if(i + endSubStringIndex <= s.length()) {
        		String checkStr = s.substring(i, i + endSubStringIndex);
        		if(checkStr.contains("#")) {
        			int number = Integer.valueOf(new String(checkStr.substring(0, 2)));
        			i += tmpIndex;
        			res.append((char)(startCharValue + number));
        		}
        		else {
        			int number = Integer.valueOf(new String(checkStr.substring(0, 1)));
        			res.append((char)(startCharValue + number));
        		}
    		}
    		else {
        		String tmp = s.substring(i, i + --endSubStringIndex);
        		int number = Integer.valueOf(new String(tmp.substring(0, 1)));
        		res.append((char)(startCharValue + number));
    		}

    	}
    	
        return res.toString();
    }
    
    public static String otherAnswer(String s) {
    	StringBuffer res = new StringBuffer();
    	
    	Map<Integer, Character> map = new HashMap<Integer, Character>();
    	int startCharValue = 96;
    	for(int i = 1 ; i <= 26 ; i++) {
    		map.put(i, (char) (startCharValue + i));
    	}
    	int endSubStringIndex = 3;
    	int tmpIndex = 2;
    	for(int i = 0 ; i < s.length() ; i++) {
    		if(i + endSubStringIndex <= s.length()) {
        		String checkStr = s.substring(i, i + endSubStringIndex);
        		if(checkStr.contains("#")) {
        			int number = Integer.valueOf(new String(checkStr.substring(0, 2)));
        			i += tmpIndex;
        			res.append(map.get(number));
        		}
        		else {
        			int number = Integer.valueOf(new String(checkStr.substring(0, 1)));
        			res.append(map.get(number));
        		}
    		}
    		else {
        		String tmp = s.substring(i, i + --endSubStringIndex);
        		int number = Integer.valueOf(new String(tmp.substring(0, 1)));
        		res.append(map.get(number));
    		}
    	}
    	
    	return res.toString();
    }
}