Chapter 1 | Arrays and Strings--判断变位词和字符串空格替换为‘ ’
来源:互联网 发布:去除数据中的噪声 编辑:程序博客网 时间:2024/05/22 05:44
1.4 Write a method to decide if two strings are anagrams or not.
译文:写一个函数判断是否两个字符串为变位词。变位词就是两个字符串中的字符相同,只是位置不同
这里似乎又涉及到了字符的重复问题,通过前面几个小节的说明,可以借助一个数组来表征字符的出现,不过这里是两个字符串,我们可以采用同一个数组,对一个字符串中的字符出现来设置数组中的对应位置加1,对另一个字符串则相应位置减1,有点类似于C++中的智能指针,最后来判断这个数组是否为空,为空,表示为变位词,否则不是。代码
bool isAnagrams(string str, string dst){if ((str.length() != dst.length()) || (0 == str.length()))return false;int len = str.length();int a[256];memset(a, 0, sizeof(a));for (int i = 0; i < len; ++i){++a[(int)str[i]];--a[(int)dst[i]];}for (int i = 0; i < 256; ++i){if (a[i] != 0)return false;}return true;}
另外也可以对字符串中的字符进行排序,然后比较两个字符串,如果相同则是变位词,否则不是。
可以借助标准库中的排序算法直接对字符串进行排序。这里还是贴一下快排的代码
int Partition(char s[], int left, int right){ int pivot = s[left]; while (left < right) { while (left < right && s[right] > pivot) //两种情况跳出循环 --right; s[left] = s[right]; //left == right时亦满足 while (left < right && s[left] <= pivot) ++left; s[right] = s[left]; //left不断变化 } s[left] = pivot; return left;}void QuickSort(char s[], int left, int right){ if (left < right) { int i = Partition(s, left, right); QuickSort(s, left, i - 1); QuickSort(s, i + 1, right); }}bool isAnagrams(string str, string dst){ if ((str.length() != dst.length()) || (0 == str.length())) return false; int len = str.length(); QuickSort(&str[0], 0, len - 1); QuickSort(&dst[0], 0, len - 1); if (str == dst) return true; else return false;}
相比第一种方法这看起来复杂点,这里只是提供一下思路,不过借助库函数中的排序函数sort会很简洁。
1.5 Write a method to replace all spaces in a string with ‘%20’.
译文:写一个函数将字符串中的所有空格用‘%20’替换。这道题其实就是 URL中的空格替换为 %20。
一个空格占一个字符位,‘%20’占用3个字符位,所以替换后需要更大的空间,这不得不另外开辟一个更大的数组空间来存放。首先得遍历一遍字符串,计算出字符串中空格的个数,然后针对每个空格需要额外添加2个字符空间开辟一个新的数组,代码
char* replace_space(char *str){if (NULL == str)return NULL;int len = strlen(str);if (len < 1)return NULL;int cnt = 0;for (int i = 0; i < len; ++i){if (' ' == str[i])cnt++;}char *dst = new char[len + 2*cnt + 1];int p = len + 2 * cnt;dst[p--] = '\0';for (int i = len - 1; i >= 0; --i) //从后往前{if (' ' == str[i]){dst[p] = '0';dst[p - 1] = '2';dst[p - 2] = '%';p -= 3;}else{dst[p--] = str[i];}}return dst;}值得注意的是,将字符串放到另外一个数组中时,需要从后面往前面遍历。
- Chapter 1 | Arrays and Strings--判断变位词和字符串空格替换为‘ ’
- Chapter 1 | Arrays and Strings -- 判断字符串中字符唯一
- Chapter 1 | Arrays and Strings--旋转字符串的判断
- Chapter 1 Arrays and Strings
- Chapter 1 Arrays and Strings - 1.1
- Chapter 1 Arrays and Strings - 1.2
- Chapter 1 Arrays and Strings - 1.3
- Chapter 1 Arrays and Strings - 1.4
- Chapter 1 Arrays and Strings - 1.5
- Chapter 1 Arrays and Strings - 1.6
- Chapter 1 Arrays and Strings - 1.7
- Chapter 1 Arrays and Strings - 1.8
- Solutions to Chapter 1 | Arrays and Strings
- CareerCup chapter 1 Arrays and Strings
- [CC150] Chapter 1 Arrays and Strings
- CC150 chapter 1 Arrays and strings.
- Chapter 1 | Arrays and Strings--字符串的翻转与去重
- 判断两字符串是否为变位词
- [Java] 数组-05 binarySearch / TestArrayCopy
- poj 1018 Communication System_贪心
- 30天自制操作系统笔记(三)
- C/C++回调函数
- PHP中流程控制的替代语法
- Chapter 1 | Arrays and Strings--判断变位词和字符串空格替换为‘ ’
- IOS 自动打包
- 指针、引用、一般变量(int 等)作为函数参数的结果对比
- java使用jna 方法调用Win32 dll
- PHP中 接收命令行参数
- 并发编程之移相器Phaser
- hdu 1116 Play on Words 并查集+欧拉通路
- 数据结构算法(1) 最小路径
- UVa 10205 Stack 'em Up (模拟)