剑指offer面试题35,找出字符串中第一个没有重复出现的字符,即第一个只出现一次的字符
这道题提出一个很通用的方法就是用数组实现简单的哈希表。看到这种方法的思路,瞬间想起了桶排序。
其基本思路是,字符是长度为8的数据类型,因此所有字符的可能情况时256种,即每一位要么为0 要么为1
可以将每个字符对应的ASIIC码值作为数组的下标。这样虽然总共的空间大小为1k,但是简单实现了哈希表的功能。
所以如果判断多个字符是不是在某字符串中出现过或者统计多个字符在某字符串中出现的次数,可以考虑这种方法。即用很小的空间来换取时间效率的提升。
比如:
1:输入两个字符串,删除第一个字符串中所有在第二个字符串中出现的字符
2:删除字符串中所有重复出现的字符(布尔数组)
3:两个单词出现的字母相同,并且每个字母出现的次数也相同(先对一个单词存数组++,再对第二个单词——)
但是现在遇到的问题倒不是思路上的,主要问题有三个:
1:不知道数组大小的时候怎么定义数组(可以直接用new在数组里创建元素)
2:ArrayList-->String
3: char[] -->String
public class DeleteString { public static String DeleteString(String s1, String s2){ if(s2==null){ return s1; } int[] arrayString2 = new int[256]; for(int i = 0 ;i<256;i++){ arrayString2[i] = 0; } int i = 0; while(i<s2.length()){ arrayString2[s2.charAt(i)]++; i++; } ArrayList l = new ArrayList(); for(int j = 0;j<s1.length();j++){ if(arrayString2[s1.charAt(j)]==0 && s1.charAt(j)!=' '){ l.add(s1.charAt(j)); } } return l.toString(); } public static void main(String[] args){ String s1 = "We are students"; String s2 = "aeiou"; String result = DeleteString(s1,s2); System.out.println(result.toString()); } }