题目描述
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
分析:用数组模拟哈希表,没毛病
class Solution {
public:
int FirstNotRepeatingChar(string str) {
int record[256] = {0};
int res = -1;
for(char c : str)
++record[c];
for(int i = 0; i < str.size(); ++i)
{
if(record[str[i]] == 1)
{
res = i;
break;
}
}
return res;
}
};
扩展题一:定义一个函数,输入两个字符串,从第一个字符串删除在第二个字符串中出现过的所有字符。例如第一个字符串“hello”,第二个字符串“ell”,删除之后第一个字符串变为“ho"
解决方法是快慢双指针,经典的方法,快指针慢指针刚开始都指向字符串开始,当快指针指向的字符出现在第二个字符中时,快指针向下遍历直到遍历到不需要删除的字符,然后进行赋值,把快指针的字符赋值给慢指针,然后两个指针都向下移动,终止条件是快指针指向字符串结尾。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void Delete_ch(char *src, char* del_chs)
{
if (!src || !del_chs) return;
int record[256] = { 0 };
char *fast = src;
char *slow = src;
//记录字符
int len_del = strlen(del_chs);
for (int i = 0; i < len_del; ++i)
record[del_chs[i]] = 1;
while (*fast != '\0')
{
//这里是while
while (*fast != '\0' && record[*fast] == 1)
{
++fast;
}
if (*fast != '\0')
{
*slow = *fast;
++slow, ++fast;
}
}
*slow = '\0';
}
int main()
{
char str[] = "hello worlll";
char str_del[] = "elr";
Delete_ch(str, str_del);
printf("%s/n", str);
getchar();
return 0;
}