LeetCode344反转字符串
class Solution {
public void reverseString(char[] s) {
int l=0; //左
int r=s.length-1 ; //右
while(r>l)
{
char temp =s[l];
s[l] = s[r];
s[r] = temp;
l++;
r--;
}
}
}
LeetCode541 反转字符串II
思路
对每两个K里面的对前k字符串进行反转
如果最后剩下的数 凑不出K个 那就将所有都反转
class Solution {
public String reverseStr(String s, int k) {
//先生成一个数组
char[] ch = s.toCharArray();
// 让数组动起来 每隔2k个就
for(int i=0;i<ch.length;i+=2*k)
{
//在定义 开始 和结束 在结束上进行判断 是否在k以内
int start =i;
// 判断尾数够不够k个
int end= Math.min( ch.length-1,start+k-1);
//进行reverse 判断
while(start<end)
{
char temp= ch[start];
ch[start] = ch[end];
ch[end] = temp;
start++;
end--;
}
//最后return new String (ch);
}
return new String(ch);
}
}
LeetCode 151反转字符串里的单词
思路
- 移除多余空格
这里使用快慢指针 用快指针去掉所有空格,再用慢指针加空格 ,出第一个单词除外,单词末尾都要加空;fast遇到空格或者遍历末尾就说明 一个单词结束 ; 最后再将数组的空间重新配置; - 双指针反转
进行合理性判断
if( right>= chars.length)
{
System.out.println(" set a wrong right");
return;
}
之后在进行 反转就可以了
- 单词反转
start =0 每当end 到了单词末尾后的空格或者是 串尾 就开始反转
if( end = chars.length|| chars[end] == ' '_{
reverse( chars,startmend-1);
start=end+1;
AC代码
class Solution {
public String reverseWords(String s) {
//生成数组
char[] chars = s.toCharArray();
//将多余空格删除 removeCharSpace
chars =removeCharSpace(chars);
// 在将字符反转 reverse
reverse(chars,0,chars.length-1);
//单词反转 reverseEachWords
reverseEachWords(chars);
return new String( chars);
}
//定义快指针和慢指针
public char[] removeCharSpace(char [] chars)
{
int slow=0;
for(int fast=0;fast<chars.length;fast++) //什么时候减一什么时候不减一
{
if(chars[fast]!=' '){
if(slow!=0)
chars[slow++]=' ';
while(fast<chars.length && chars[fast]!=' ' )
{
chars[slow++] = chars[fast++];
}
}
}
char [] newchars = new char[slow];
System.arraycopy (chars,0,newchars,0,slow);
return newchars;
}
//双指针规定范围字符串反转
public void reverse(char[] chars, int left,int right){
if(right>=chars.length) //什么时候大于等于
{
System.out.println("set a wrong right");
return;
}
while(left<right)
{
char temp= chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
}
public void reverseEachWords(char[] chars){
int start=0;
for(int end=0;end<= chars.length;end++)
{
if(end== chars.length|| chars[end]==' ')
{
reverse(chars,start,end-1);
start=end+1;
}
}
}
}
拓展一下
- 字符串和数组有什么差别,
字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。
在C语言中,把一个字符串存入一个数组时,也把结束符 '\0’存入数组,并以此作为该字符串是否结束的标志。
小感悟
本来想多写点 这两天欠的有点多 得赶紧补补