您的位置:首页 > 其它

从字符串中查找第一次出现一次的字符

2017-02-04 14:40 281 查看
美团面试手写

正确的思路为:将字符对应的asc码当为数组角标,一次循环计算所有字符出现次数,再一次字符顺序的循环,查找出字符出现为1次的返回。

注意点:

char类型占1个字符,2个字节,2*8位,有2^16 = 65536种可能,范围 0 - 65535,但是抛去转义等字符,键盘上输入的范围是 0 - 255 共256种可能。所以数组长度为256足以。

第一次循环计算所有字符出现次数。如何按时间查找?这个问题我想了半天,后来才发现按照字符顺序查找就可以了。

部分代码如下:

/**
* 查找出第一次出现一个的字符
*
* @param str  例如: asd123sdwer2423sdsd
* @return     返回: a
*/
public static String getOnlyOneFristStr(String str){
if(str == null || "".equals(str.trim()) ) return null;

char[] chars = str.toCharArray();

// 于上处第一点分析,256长度足以。
int[] charArray = new int[256];

// 1、计算出现字符次数
for(char c : chars){
charArray[(int)c]++;
}

// 2、按照字符出现顺序查找出现次数,返回第一个为1的字符。
for(char c : chars){
if(charArray[(int)c] == 1){
return String.valueOf(c);
}
}

return null;
}


github:https://github.com/liujinjin777/liujinjintest.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: