问了自己的项目,问有没有一些自己的创新。问了英语水平,让英语介绍了一下自己的专业。
手撕代码(没做出来淦,估计凉了):
第一个只出现一次的字符
在一个长为?字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
数据范围:0<=n<=10000,且字符串只有字母组成。
要求:空间复杂度 O(n),时间复杂度O(n)。
示例1
输入:"google"????????输出:4
示例2
输入:"aa"????????输出:-1
答案:
解题思路想法比较直接,构建数组count【26】,第一次遍历记录各字母出现了几次并改写count,第二次遍历从输入字符串头开始找,找到第一个count为1的,就是第一次只出现一次的。由于是两次遍历,时间复杂度是O(2N),空间复杂度是count的大小,即固定大小。
题目中因为一定要包含这个FirstNotRepeatingChar函数,所以写成这个样子,实际上是不用的。
#include<stdio.h>
#include<string.h>
int FirstNotRepeatingChar( char* str )
int main () {
char a[10000];
int rls;
gets(a);
rls=FirstNotRepeatingChar(a);
if (rls==-1)
printf("\n-1");
else
printf("\n%c",a[rls]);
return 0;
}
int FirstNotRepeatingChar( char* str ) {
int i, count[26]={0};
for (i=0;i<strlen(str);i++) {
count[str[i]-'a']++;
}
for (i=0;i<strlen(str);i++) {
if (count[str[i]-'a']==1) return i;
}
return -1;
}
|