题目1.:实现一个算法来判断一个字符串中的字符是否惟一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)java
首先,你能够问面试官,构成字符串的字符集有多大?是ASCII字符,仍是只是26个字母? 仍是有更大的字符集,对于不一样的状况,咱们可能会有不一样的解决方案。面试
若是咱们假设字符集是ASCII字符,那么咱们能够开一个大小为256的bool数组来表征每一个字 符的出现。数组初始化为false,遍历一遍字符串中的字符,当bool数组对应位置的值为真, 代表该字符在以前已经出现过,便可得出该字符串中有重复字符。不然将该位置的bool数组 值置为true。代码以下:算法
//若是字符集只是a-z(或是A-Z),那就更好办了,用位运算只须要一个整型数便可。 public static boolean stringDiff(String str) { int checker = 0; for (int i = 0; i < str.length(); ++i) { int val = str.charAt(i) - 'a'; if ((checker & (1 << val)) > 0) return false; checker |= (1 << val); } return true; } //bool数组实现 public static boolean stringDiff2(String str) { boolean[] char_set = new boolean[256]; for (int i = 0; i < str.length(); i++) { int val = str.charAt(i); if (char_set[val]) return false; char_set[val] = true; } return true; } //int数组,位表示 public static boolean stringDiff(String string) { int[] a = new int[8]; int len = string.length(); for(int i=0; i < len; ++i) { int v = (int)string.charAt(i); int idx = v / 32; int shift = v % 32; if((a[idx] & (1 << shift)) > 0) return false; a[idx] |= (1 << shift); } return true; }
题目2.:一个字符串中,求出现次数最多的那个字母及次数,若是有多个重复的则都求出。数组
public static void doString(String input) { char[] charArr = input.toCharArray(); List list = new ArrayList(); TreeSet set = new TreeSet(); for(int i = 0; i < charArr.length; i++) { list.add(charArr[i]); set.add(charArr[i]); } System.out.println(set); Collections.sort(list); System.out.println(list); StringBuilder sb = new StringBuilder(); for(int i = 0; i < list.size(); i++) { sb.append(list.get(i)); } input = sb.toString(); System.out.println(input); int maxNum = 0; String maxString = ""; List maxList = new ArrayList(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { String str = iterator.next().toString(); int startIndex = input.indexOf(str); int lastIndex = input.lastIndexOf(str); int tempMax = lastIndex - startIndex + 1; if(tempMax > maxNum) { maxNum = tempMax; maxString = str; maxList.add(str); } else if(tempMax == maxNum) { maxList.add(str); } } int index = 0; for(int i = 0; i < maxList.size(); i++) { if(maxList.get(i).equals(maxString)) { index = i; break; } } System.out.println("max data: "); for(int i = index; i < maxList.size(); i++) { System.out.print(maxList.get(i) + " "); } System.out.println(); System.out.println("max: " + maxNum); }