package test1;

/**
 * A utility class for working with strings.
 *
 */
public class StringUtil {
	
	private StringUtil() {
		
	}
	
	/**
	 * The version of this test.
	 */
	public static final String TEST_VERSION = "C";

	/**
	 * Returns the string formed by concatenating the argument
	 * strings s and t with a separator string between them.
	 * For example:
	 * 
	 * <pre>
	 * Utility2B.join("abc", "xyz", ":")
	 * </pre>
	 * 
	 * returns the string <code>"abc:xyz"</code>.
	 *  
	 * @param s a non-null string
	 * @param t a non-null string
	 * @param sep a non-null separator string
	 * @return the string formed by concatenating s followed by
	 * sep followed by t
	 */
	public static String join(String s, String t, String sep) {
		return s + sep + t;
	}
	
	
	/**
	 * Returns the shortest of the two strings s and t. For example,
	 * <code>shortest("python", "java")</code> returns the string
	 * <code>"java"</code> because the string <code>"java"</code> is shorter
	 * than the string <code>"python"</code>. 
	 * 
	 * @param s a non-null string
	 * @param t a non-null string
	 * @return the shortest of the two strings s and t
	 * @throws IllegalArgumentException if s and t have the same length
	 */
	public static String shortest(String s, String t) {
		if (s.length() == t.length()) {
			throw new IllegalArgumentException();
		}
		if (s.length() < t.length()) {
			return s;
		}
		return t;
	}
	
	
	/**
	 * Computes the number of characters that are different in
	 * two strings of equal length. The strings are compared
	 * character by character and the number of characters that
	 * differ is returned. For example:
	 * 
	 * <pre>
	 * distance("talk", "talk")    returns  0
	 * distance("talk", "walk")    returns  1
	 * distance("well", "walk")    returns  2    
	 * distance("pick", "walk")    returns  3
	 * distance("zzzz", "walk")    returns  4
	 * </pre>
	 * 
	 * @param s a non-null string
	 * @param t a non-null string
	 * @return the number of characters that differ between s and t
	 * @pre. s.length() == t.length()
	 */
	public static int distance(String s, String t) {
		int d = 0;
		for (int i = 0; i < s.length(); i++) {
			if (s.charAt(i) != t.charAt(i)) {
				d++;
			}
		}
		return d;
	}
	
    
    /**
     * Returns the character that appears most frequently in the
     * string s. You may assume that only one character appears most
     * frequently in s.
     * 
     * @param s a string
     * @return the character that appears most frequently in the
     * string s
     * @pre. s.length() is at least 1
     */
    public static char mostFrequentChar(String s) {
    	int max = 1;
    	char cmax = s.charAt(0);
    	for (int i = 0; i < s.length(); i++) {
    		int ct = 0;
    		char ci = s.charAt(i);
    		for (int j = 0; j < s.length(); j++) {
    			if (s.charAt(j) == ci) {
    				ct++;
    			}
    		}
    		if (ct > max) {
    			max = ct;
    			cmax = ci;
    		}
    	}
    	return cmax;
    }
}
