确定字符互异
题目描述
请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。
测试样例:
"aeiou" 返回:True "BarackObama" 返回:False #include <stdio.h> #include <stdbool.h> bool checkdiff(char *iniString) { int a[256]={0}; for(int i=0;iniString[i]!='\0';i++) { if(a[iniString[i]] != 0) return false; else a[iniString[i]]=1; } return true; } int main(int argc, const char * argv[]) { char str[]="abcde"; printf("%d",checkdiff(str)); return 0; } |
反转字符串
请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。
给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。
测试样例:
"This is nowcoder" 返回:"redocwon si sihT" Java实现 class Reverse { public: string reverseString(string iniString) { int n=iniString.size(); for(int i=0;i<n/2;i++) { char temp=iniString[n-i-1]; iniString[n-i-1]=iniString[i]; iniString[i]=temp; } return iniString; } }; |
本书中的大部分题目都可以在牛客网在线验证提交,代码部分由于采用java验证,因此略有不同,比如java中可以通过iniString.size()获取元素个数.
C实现时由于函数接口为void reverse(char *str),所以实现方式不同:
#include <stdio.h> void reverse(char *str) { /*str为空,返回,规避解引用空指针*/ if(str == NULL) return; char *end = str; char temp; while(*end!='\0') { end++; } /*此时end指向\0,需要指向前一个反转的字符*/ end--; while(str < end) { temp = *str; *str++ = *end; *end-- = temp; } } int main(int argc, const char * argv[]) { char str[]="abcde"; reverse(str); printf("%s\n",str); /*程序中不判空,会出现coredump*/ reverse(NULL); return 0; } |
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。