public class A14 {
/**
* 在一个字符串中找到第一个只出现一次的字符
* 如输入baccdeff,则输出b。
* @param args
*/
public static void main(String[] args) {
String testString = "bac";
System.out.println(getFirstSingle(testString));
}
/**
* 因为字符只有256种可能,所以我们可以申请一个256大小的数组来
* 统计每个字符出现的次数(以空间换时间),
* 统计完后,我们以原数组的元素值为下表,访问统计数组,
* 直到遇到第一个访问数组元素值为1的元素,
* 其所在位置的字符即为第一个只出现一次的字符。
* @param testString
* @return
*/
private static char getFirstSingle(String testString) {
int length = 'z' - 'A';
int[] temp =new int[length];
int i = 0,j=0;
for(;i<testString.length();i++){
temp[testString.charAt(i)-'A']++;
}
for(;j<testString.length();j++){
if(temp[testString.charAt(j)-'A'] == 1){
return testString.charAt(j);
};
}
return 0;
}
/**
* 不知道还有没有更加灵敏的算法,感觉上面的应该比较的接近了,
* 首先是必须扫描一遍吗?这个恐怕是必须的,不遍历
* 一遍,不可能确认候选的元素的是正确的。再者说存储空间,
* 有可能比上面的少吗?有把'a'到'Z'之间的空间去掉
* 但是在位图中,需要加入判断,可能会得不偿失,数据量比较大的话。
* */
}
在一个字符串中找到第一个只出现一次的字符
最新推荐文章于 2020-07-16 22:05:02 发布