题1:第一个只出现一次的字符
题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
示例
输入
"google"
返回值
4
解析:
-
遍历计数:
-
对于计数问题可以用传统的count++计数,但是这样效率太低,因此可以创建数组当计数器
- index 保存元素, value 保存次数
-
牛客网剑指offer算法题打卡——day04 中的用数组优化求斐波那契数列的方法
-
相关面试题:
@Test public void array_count(){ /** * 找出arr中各元素出现的次数: */ int[] arr = {1,4,1,4,2,5,4,5,8,7,8,77,88,5,4,9,6,2,4,1,5} ; //上述数组最大值为88,因此可以创建一个容量为100的数组计数器 int[] count_array = new int[100]; //遍历目标数组,用index对应元素,用value自增来计数 for (int i = 0; i < arr.length; i++) { count_array[arr[i]]++; } for (int i = 0; i < count_array.length; i++) { if (count_array[i] != 0){ //当value不等于数组初始值0时,说明有值,此时打印index(元素)+value(次数)即可 System.out.println(i+" 出现了:"+count_array[i]+"次"); } } }
1 出现了:3次 2 出现了:2次 4 出现了:5次 5 出现了:4次 6 出现了:1次 7 出现了:1次 8 出现了:2次 9 出现了:1次 77 出现了:1次 88 出现了:1次
-
-
char字符与Ascii码
-
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。
在英语中,用128个符号编码便可以表示所有,但是用来表示其他语言,128个符号是不够的。
-
@Test public void testAscii(){ char c = 103; System.out.println((char) c);//输出:g (g的ascii码为103) System.out.println((int) c);//输出:103 (直接转数字) }
-
打印128个Ascii码
@Test public void printACSII(){ char a=0; String str = ""; while(a<128){ str += a; str+=","; a++; } System.out.println(str); }
,,,,,,,, , ,,,,,,,,,,,,,,,,,,, ,!,",#,$,%,&,',(,),*,+,,,-,.,/,0,1,2,3,4,5,6,7,8,9,:,;,<,=,>,?,@,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,[,\,],^,_,`,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,{,|,},~,,
在控制台打印会出现乱码,百度后得:
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符 [1] 。其中:
*0~31及127(共33个)是控制字符*或通信专用字符(其余为可显示字符),**如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(响铃)等;通信专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;ASCII值为8、9、10 和13 分别转换为退格、制表、换行和回车字符。它们并没有特定的图形显示,但会依不同的应用程序,而对文本显示有不同的影响 [1] 。
32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。
65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
-
-
扩展阅读:
解答:
public int FirstNotRepeatingChar(String str){
//判空
if(str.length() == 0){
return -1;
}
//字符串由字母组成因此范围为0~128,创建数组计数容器
int[] ints = new int[128];
//用计数容器的index对应元素,value计数
for (int i = 0; i < str.length(); i++) {
ints[str.charAt(i)]++;
}
//用同样字符顺序遍历,首次当只出现value为1即满足要求
for (int i = 0; i < str.length(); i++) {
if (ints[str.charAt(i)] == 1){
return i;
}
}
return -1;
}