江门营销型网站建设,万年县建设银行网站拼音全称,常州天启建设公司网站,知网被罚8760万反转字符串
代码随想录 0344.反转字符串
344. 反转字符串 - 力扣#xff08;LeetCode#xff09;
#xff08;用时#xff1a;0.05小时#xff09;
思路
这道题很简单也很经典。
字符串的反转方法有很多#xff0c;我这里是用for循环通过数组长度和下标计算来交换。…反转字符串
代码随想录 0344.反转字符串
344. 反转字符串 - 力扣LeetCode
用时0.05小时
思路
这道题很简单也很经典。
字符串的反转方法有很多我这里是用for循环通过数组长度和下标计算来交换。
写这道题时逻辑不难后面涉及到指定区域的翻转后脑子就跟不上了。。。后面就直接用双指针了。。
代码实现
public class ReverseString
{public void ReverseStringFun(char[] s){char temp;for(int i0;is.Length/2;i){temp s[i];s[i] s[s.Length-1-i];s[s.Length - 1 - i] temp;}}
}
反转字符串II
代码随想录 0541.反转字符串II
541. 反转字符串 II - 力扣LeetCode
用时3小时
思路
这道题主要是要理解题意。。
题目要求我们按2K为一组每组的前K个元素进行翻转。 这意味着一般的情况应该是K个翻转K个不翻转 当元素无法达到2K时 若K则翻转K个元素 若K则翻转剩余所有的元素
错误
这道题在交换指定区域的数组元素中卡住对自己更无语了
上一道题是用for循环然后直接通过计算一下子秒掉了但是这道题中初始值和终点值有变化写多了看多了逻辑就混乱了。。。。于是用回了while双指针。。。
代码实现
public char[] ReserseChars(int start,int end, char[] chars)
{char temp;while(startend){temp chars[start];chars[start] chars[end];chars[end] temp;start;end--;}return chars;
}
public string ReverseStr(string s, int k)
{char[] ans s.ToArraychar();for (int i0;is.Length;i2*k){//剩余的少于k个if (ikans.Length){ans ReserseChars(i, ans.Length-1, ans);}//大于k个小于2k个else{ans ReserseChars(i, i k-1, ans);}}return new string(ans);
}
翻转字符串里的单词
代码随想录 0151.翻转字符串里的单词
151. 反转字符串中的单词 - 力扣LeetCode
用时2小时
思路
这道题是对字符串中的单词翻转意思就是单词的顺序翻转单词本身里面的字母不要翻转。
要实现有很多种方法又看到一位大佬用了字典键值对。我刚开始也想着可以用分割字符串的方法。
但训练算法时还是不要用这么多库函数。卡哥也要求我们在原字符串上操作。
我们可以先将整体的字符串翻转这样单词的顺序就达到了我们的效果。但是单词的字母也翻转了我们逐一对单个单词再翻转一次即可。此外还要消减空格让每个单词之间只有一个空格。
重点
个人感觉这道题主要是思路上的问题。卡哥给的思路很清晰所以实现起来没有出什么问题。
但是自己想的时候是很混乱的判断来判断去的。。。思路真的很重要啊
错误
写的过程中犯了一些错误 去除空格和翻转单词的实现。 最终输出的字符串后面多余了很多重复的字母们。 使用ReserseChars时数组越界 分别在去除空格和翻转单词的for循环中while循环的条件数组越界了。
个人理解如下 去除空格和翻转单词的实现错误。 这道题里去除空格和翻转单词分开做比较好这样不容易乱。 最终输出的字符串后面多余了很多重复的字母们。 后面重复的都是新字符串中无用的空间。因为新的字符串的长度没有记录下来导致后面翻转单词时依旧遍历原本字符串的长度把后面多余的“垃圾”也翻转然后输出了。 使用ReserseChars时数组越界 这是在输入begin和end的时候fast此时在前面的while中可能是len了此时ans[fast]会越界。 而且这个单词有效的范围也是slow到fast-1fast本身停止的条件就是当fast指向不属于该单词的范围的时候即越界或者遇到空格的单词结束。 分别在去除空格和翻转单词的for循环中while循环的条件数组越界了。 这是因为在for中间“擅自”让i/fast向前探索只有两种情况下会让它停下来 一是找到指定要求的地方了比如找到不属于单词的部分了 二是到了末尾这个单词刚好是最后一个。 第一种情况用ans[fast或i]! 既可但第二种情况下的ans是会越界的因此要有一个判断其是否超出范围的条件且这个条件要放在第一个条件前判断。
代码实现
这道题是剑指Offer的题目。力扣上已经下架了卡哥的卡玛网上没有C#的检测也没有专门去写C的版本。。。
public char[] ReserseChars(int start, int end, char[] chars)
{char temp;while (start end){temp chars[start];chars[start] chars[end];chars[end] temp;start;end--;}return chars;
}
public string Reserse(string s,int k)
{char[] ans ReserseChars(0, s.Length - 1, s.ToArraychar());
ans ReserseChars(0, k-1, ans);ans ReserseChars(k - 1, s.Length - 1, ans);
return new string(ans);
}
替换数字空格
代码随想录 0054.替换数字
用时1小时
这道题没有对字符串的翻转操作了本题主要考察的是插入删除个人感觉。
C#中对string的扩张不用库函数太麻烦了因此就不写卡哥教的双指针的方法了实现用了库函数。卡哥的方法有分析了一下接下来二刷试试用C实现吧。
代码实现
public string Replace(string s)
{string number number;int index 0;
while(indexs.Length){if (s[index]0 s[index]9){s s.Remove(index, 1);s s.Insert(index, number);}index;}return s;
}
右旋字符串
代码随想录 0055.右旋字符串
用时1小时
只能说太牛了卡哥的思路写完上一题过来还是没有想到这个想法整体翻转局部翻转
思路和翻转单词那里一样。
同样也是剑指Offer。
代码实现
public char[] ReserseChars(int start, int end, char[] chars)
{char temp;while (start end){temp chars[start];chars[start] chars[end];chars[end] temp;start;end--;}return chars;
}
public string Reserse(string s,int k)
{char[] ans ReserseChars(0, s.Length - 1, s.ToArraychar());
ans ReserseChars(0, k-1, ans);ans ReserseChars(k - 1, s.Length - 1, ans);
return new string(ans);
}