剑指Offer_面试题35_第一个只出现一次的字符
来源:互联网 发布:win10 加密软件哪款好 编辑:程序博客网 时间:2024/06/04 23:33
题目描述
在一个字符串(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'){//这里是whilewhile (*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;}
阅读全文
0 0
- 剑指Offer_面试题35_第一个只出现一次的字符
- 剑指offer_第一个只出现一次的字符
- 剑指offer_第一个只出现一次的字符
- 剑指offer_第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题 35: 第一个只出现一次的字符
- 面试题35:第一个只出现一次的字符
- 面试题35_第一个只出现一次的字符
- 面试题39:第一个只出现一次的字符
- 调用系统设置页面和WIFI设置页面
- Hibernate基础原理(一)
- 防sql注入方法
- 数据智能需求旺盛 阿里云MaxCompute 2.0华南区开服
- 使用sleuth实现微服务跟踪
- 剑指Offer_面试题35_第一个只出现一次的字符
- webdriver定位元素的几种方式讲解
- Base64编码原理与应用(详细)
- python file write之后无法read的原因和处理办法
- switch的比较用法
- PhpStorm和WAMP配置调试参数
- Win10虚拟机ping本地ip
- 思维导图之React学习
- 断路器hystrix原理及使用