代码随想录第八天|344.反转字符串,541. 反转字符串II,剑指Offer 05.替换空格 ,剑指Offer 05.替换空格

(本文主要是用于个人笔记的书写,很多地方的使用可能并不专业,如需学习更加建议移步代码随想录官网代码随想录 (programmercarl.com)) 

344.反转字符串

        ---题意要求将一个数组进行翻转,那么双指针遍历即可,这题也比较基础

  public void reverseString(char[] s) {
        int len = s.length-1;
        int i = 0;
        while(i<=len){
            char a = s[i];
            s[i] = s[len];
            s[len] = a;
            i++;
            len--;
        }
    }

541. 反转字符串II

            char[] ch = s.toCharArray();

如果给的是一个string对象,那么就先需要将它转化为char数组,更好理解

这道题有个小坑的点--前 k 个字符,其实是包括第0号位置的,所以把这个减去

public String reverseStr(String s, int k) {
            char[] ch = s.toCharArray();
            int len = ch.length-1;
            int right = len;
          System.out.println(len); 
            //先进入循环,循环里直接判断大小
            for(int i =0;i<ch.length;){
                if(len-i+1<k){
                    while(len>i){
                        char a =ch[i];
                        ch[i]=ch[len];
                        ch[len]=a;
                        i++;
                        len--;
                        System.out.println("要结束了");   //这里操作的太愚蠢了
                    }
                    break;
                }else{
                    int newleft =i;
                    int newright = i+k-1;
                     System.out.println("--交换前---"+ch[newleft]+ch[newright]);
                    while(newleft<newright){
                        char a = ch[newleft];
                        ch[newleft]=ch[newright];
                        ch[newright] = a ;
                        newleft++;newright--;
                    System.out.println("--交换后---"+ch[newleft]+ch[newright]);

                    }
                    i=i+k+k;
                }               
             
            }
            return new String(ch);             
    }

 //这里做的时候傻逼了,对于边界的定义没有一直坚定的贯彻住,所以导致非常难受,会一直出bug同时,也忽视了k是包括本体元素的,导致取值的时候有误,但是好在也还是没什么问题

剑指Offer 05.替换空格 

---其实这道题的思路还是比较简单的,而且我暑假也做过了,操作也没有什么复杂的地方,但是唯一需要的就是对于string的掌握,由于我个人对string的操作并不熟悉所以只有思路却写不出来

  public String replaceSpace(String s) {
  //-------2.用stringbuilder来合并string,然后转化为char[]对String操作----
        if (s == null) {
            return null;
        }
		//选用 StringBuilder 单线程使用,比较快,选不选都行
        StringBuilder sb = new StringBuilder();
        for(int i =0; i<s.length() ; i++){
            if(s.charAt(i)==' '){
                sb.append("  ");
            }
        }
    int left = s.length()-1;
    s=s+sb.toString();
    int right =s.length()-1;  
    char[] c1= s.toCharArray();
    for(int i =left;i>=0;i--){
        if(c1[i]==' '){
            c1[right]='0';
            right--;
            c1[right]='2';
            right--;
            c1[right]='%';
            right--;
        }else{
            c1[right]=c1[i];
            right--;
        }
    }

    return new String(c1);
}

String 与StringBuffer的差别与使用

string          --------返回查找转换可以
1.字符串的连接
string1.concat(string2);
或者直接+
2.获得索引处的字符
charAt(index)
3.与另一个字符串进行比较
compareTo
4.从字符数组转化为string
copyValueOf(char[] data)
5.返回指定字符在字符串中第一次出现的索引
index of()
6.字符串中替换指定字符
public String replace(char searchChar, char newChar)  
7.将字符串转化为一个指定字符数组
toCharArray()
8.判断是否为空
isEmpt() 

----------------   翻转插入删除替换等操作

在使用 StringBuffer 类时,
每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象
1.将指定的字符串追加到此字符序列
append()
2.将指定字符串翻转
reverse()
3.删除字符
 delete(int start, int end)
4.插入字符
insert(int offset, String str)
5.替换字符
replace(int start, int end, String str)
6.返回索引处的char值
charAt(int index)
7.设置字符
setCharAt(int index, char ch)
8.返回string
String toString()

--拓展空间用StringBuffer,交换用可以用string转为CharArray

151.翻转字符串里的单词

 public String reverseWords(String s) {
        char [] bb = s.toCharArray();
        int left = 0 ; int right = bb.length-1;
        int last =0;

        //-----先全部翻转,再局部翻转
        while(left<right){
            char chx = bb[left];
            bb[left]=bb[right];
            bb[right]=chx;
            left++;
            right--;
        }

        for(int i=0;i<bb.length;i++){
            if(i==bb.length-1){
                int rig = i;
                int lef = last;
                while(lef<rig){
                    char gg = bb[lef];
                    bb[lef] = bb[rig];
                    bb[rig] =gg;
                    rig--;
                    lef++;
                 }

            }


            if(bb[i]==' '){
                System.out.println("这里是运算过的----"+i);
                int rig = i-1;
                int lef = last;
                System.out.println("ssss"+lef);
                while(lef<rig){
                    char gg = bb[lef];
                    bb[lef] = bb[rig];
                    bb[rig] =gg;
                    rig--;
                    lef++;
                   System.out.println("1111-----这里是运算过的----");
                    last=i+1;
                }
            }
           
        }
   //------自己写的问题就是无法处理与压缩空值
    return new String(bb);
    }

--------但是里面总是有对于空值的处理问题,反正就是有问题......匿了匿了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值