目录
确定字符互异
最后一个单词长度
原串翻转
确定字符互异
描述给定一个字符串string iniString,请返回一个bool值,True代表字符串的所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符且不允许使用额外的存储结构,字符串的长度小于等于3000。大小写字母算不同的字符
测试样例:
"aeiou"
返回:True
"BarackObama"
返回:False
思路:方法一 :先对字符串进行排序,然后进行遍历若前一个等于后一个元素,则返回false, 若遍历完仍没找到则返回true
方法二:直接进行遍历,双重循环,首先确定一个元素,然后和其后面元素做一一比对,相同返回 false,不同返回true。代码:
bool checkDifferent(char* str) {
if (strlen(str)>256) return false;
for (int i = 0; i < strlen(str); i++) {
for (int j = i + 1; j < strlen(str); j++) {
if ((str[i] ^ str[j]) == 0)
return false;
}
}
return true;
}
最后一个单词长度
描述
给出一个只包含大小写字母和空格的字符串s,请返回字符串中最后一个单词的长度
如果字符串中没有最后一个单词,则返回0
注意:单词的定义是仅由非空格字符组成的字符序列。
例如:
s ="Hello World",
返回5。
思路:因为此处是求最后一个单词长度,只需要从后往前遍历,找到最后一个单词。即无视最后面的空格,从过往前遍历,然后找到空格停止,然后返回计数器的值,代码:
int len_lastworld(char*arr){
assert(arr!=NULL);
int count = 0;
int len = strlen(arr);
if (len == 0) return 0;
while (arr[len - 1] == ' ') len--;
while (arr[len - 1] != ' '&&len!=0){
len--;
count++;
}
return count;
}
原串翻转
描述给定一个string iniString,请返回一个string,为该字符串翻转后的结果。要求不使用额外数据结构和储存空间,可以使用单个过程变量,保证字符串的长度小于等于5000。
测试样例:
"This is nowcoder"
返回:"redocwon si sihT"
思路:因为不能额外使用储存空间,所以需要在原数组中进行操作,原串翻转我们可以进行前后互换,即将最后一个元素和第一个互换,倒数第二个和第二个进行交换……直到前后移动的标记相遇代码如下:
void reverseString(char* arr) {
int len = strlen(arr);
int i = 0, j = len - 1;
while (i



