博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第八天 第四章 字符串 ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 05.替换空格 ● 151.翻转字符串里的单词 ● 剑指Offer58-II.左旋转字符串
阅读量:38364 次
发布时间:2022-02-15

本文共 3326 字,大约阅读时间需要 11 分钟。

8 第四章 字符串

● 344.反转字符串

● 541. 反转字符串II
● 剑指Offer 05.替换空格
● 151.翻转字符串里的单词
● 剑指Offer58-II.左旋转字符串

344.反转字符串

void swap(char* a, char* b)    {
char temp=*a; * a = *b; * b = temp; } void reverseString(char* s, int sSize) {
int left = 0; int right = sSize - 1; for (; left < right;) {
swap(&s[left++], &s[right--]); } }

非常简单,双指针轻松秒杀。

  1. 反转字符串II
void swap(char* a, char* b)    {
char temp=*a; * a = *b; * b = temp; } void reverseString(char* s, int sSize) {
int left = 0; int right = sSize - 1; for (; left < right;) {
swap(&s[left++], &s[right--]); } }char* reverseStr(char* s, int k) {
int n = strlen(s); for (int i = 0; i < n; i+=2*k) {
int last = n - i; if (2*k>last>k) {
reverseString(&s[i], k); break; } if (last

不要把自己限制死了,这里可以用i+2K这样写出来的代码更加精巧。

剑指Offer 05.替换空格

char* replaceSpace(char* s){
int count=0; int sOldSize=strlen(s); for(int i=0;i
=0;i--,j--) {
if(s[i]!=' '){
newS[j]=s[i]; }else{
newS[j--]='0'; newS[j--]='2'; newS[j]='%';//此处多加小心 } } newS[newlen]='\0'; return newS;}

通过预先创建大小正确的字符串儿,然后再通过双指针。挪动填充整个串儿完成。

151.翻转字符串里的单词

void swap(char* a, char* b){
char temp = *a; *a = *b; *b = temp;}void reverseString(char* s, int sSize) {
// 344.反转字符串 int left = 0; int right = sSize - 1; for (; left < right;) {
swap(&s[left++], &s[right--]); }}char* reverseWords(char* s) {
int length = strlen(s); reverseString(s, length); int fast = 0, slow = 0; if (length <= 1) {
if (s[0] == ' ') {
return NULL; } else {
return s; } } for (; fast < length; ) {
while (s[fast] == ' ' && fast < length) {
fast++; } slow = fast; while (s[fast] != ' ' && fast < length) {
fast++; } reverseString(&s[slow], fast - slow); } while (fast < length && s[fast] == ' ') {
fast++; } slow = 0; fast = 0; while (fast < length && s[fast] == ' ') {
fast++; } for (; fast < length; fast++) {
if (fast - 1 > 0 && s[fast - 1] == s[fast] && s[fast] == ' ') {
continue; } else {
s[slow++] = s[fast]; } } if (slow - 1 > 0 && s[slow - 1] == ' ') {
// 去掉字符串末尾的空格 s[slow-1] = '\0'; } else {
s[slow] = '\0';// 重新设置字符串大小 } return s;}

将前面的题结合起来,就是这道题的答案了。

剑指Offer58-II.左旋转字符串

void swap(char* a, char* b){
char temp = *a; *a = *b; *b = temp;}void reverseString(char* s, int sSize) {
// 344.反转字符串 int left = 0; int right = sSize - 1; for (; left < right;) {
swap(&s[left++], &s[right--]); }}char* reverseLeftWords(char* s, int n) {
int length = strlen(s); reverseString(s,length); reverseString(s,length-n); reverseString(&s[length-n],n); return s;}

让我想起了一种加密方式就是把字母整体向左移或者右移多少,应该这种加密方式最后写出来的代码也跟这个类似吧。

有没有可能我说的他是一道题?

转载地址:http://ttvduy.baihongyu.com/

你可能感兴趣的文章
Android程序员的春天!12个View绘制流程高频面试题,分享PDF高清版
查看>>
深入交流安卓!新鲜出炉的Android面试真题集锦我给你们整理出来了!Android面试题及解析
查看>>
深入浅出Android开发!你会的还只有初级工程师的技术吗?一线互联网公司面经总结
查看>>
深度剖析原理!超全Android中高级面试复习大纲,含BATJM大厂
查看>>
温故而知新!Android开发者该学习哪些东西提高竞争力?成功入职阿里
查看>>
火爆知乎的Android面试题-Android-App的设计架构经验谈,大厂内部资料
查看>>
看完直接怼产品经理!Android多进程从头讲到尾,跳槽薪资翻倍
查看>>
快速从入门到精通!面试的时候突然遇到答不上的问题怎么办?已拿到offer
查看>>
Android开发知识体系!腾讯+字节+阿里面经真题汇总,成功入职阿里
查看>>
android开发语言!大厂经典高频面试题体系化集合,移动架构师成长路线
查看>>
typescript学习(进阶)
查看>>
三天敲一个前后端分离的员工管理系统
查看>>
axios请求携带cookie实现跨域(后端springsecurity)
查看>>
Uncaught (in promise) TypeError: $data.tableData.filter is not a function
查看>>
spring data rest 不隐藏主键id
查看>>
后端传来json数据,vue前端如何渲染??
查看>>
vue 增删改数据实时更新
查看>>
手敲一个前后端分离项目——成果演示
查看>>
Linux——基础命令篇
查看>>
EL表达式、JSTL标签库、文件上传和下载
查看>>