代码随想录------字符串第一天

344. 反转字符串

一定要养成双指针法的思维
如果题目关键的部分直接用库函数就可以解决,建议不要使用库函数。毕竟面试官一定不是考察你对库函数的熟悉程度, 如果使用python和java 的同学更需要注意这一点,因为python、java提供的库函数十分丰富。如果库函数仅仅是 解题过程中的一小部分,并且你已经很清楚这个库函数的内部实现原理的话,可以考虑使用库函数。

class Solution {
    public void reverseString(char[] s) {
        int left=0;
        int right=s.length-1;
        while(left<right){
            char temp=s[left];
            s[left] = s[right];
            s[right] = temp;
            left++;
            right--;
        }
    }
}

541. 反转字符串 II

class Solution {
    public String reverseStr(String s, int k) {
        char[] b = s.toCharArray();
        for(int i=0;i<b.length;i+=2*k){
            if(i+k<=b.length){
                reverse(b,i,i+k-1);
                continue;
            }else{
                reverse(b,i,b.length-1);
            }
        }
return new String(b);
    }
    //设计反转函数
    public  void reverse(char[] a,int i,int j){
        for(;i<j;i++,j--){
            char temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
    }
}

双指针法

class Solution {
    public String reverseStr(String s, int k) {
        //将字符串,转化为数组
     char[] a = s.toCharArray();
     //双指针,分段操作,start(每段的开始) end(每段的结束)
     for(int i=0;i<a.length;i+=2*k){
         int start = i;
         //判断当前段是否大于数组长度,是否在反转区间
         int end = Math.min(a.length-1,start+k-1);
         while(start<end){
             char temp = a[start];
             a[start] = a[end];
             a[end] = temp;
             start++;
             end--;
         } 
     }
return new String(a);
    }
}

剑指 Offer 05. 替换空格

创建新字符串接收法

class Solution {
    public String replaceSpace(String s) {
        StringBuilder a = new StringBuilder();     
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)==' '){
               a.append("%20");
            }else{
                a.append(s.charAt(i));
            }
        }
        return new String(a);

    }
}

双指针法

class Solution {
    public String replaceSpace(String s) {
        if(s==null || s.length()==0){
            return s;
        }
        //扩容空间,%20是三个字符,所以三倍的空格,但本身就有一个,所以是两倍的空格
        StringBuilder str = new StringBuilder();
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)==' '){
                str.append("  ");
            }
        }
        //若没有空格,返回
        if(str.length()==0){
            return s;
        }
        //有空格,定义两个指针
        int left = s.length()-1;//原始字符串最后一个位置
        s+=str.toString();
        int right = s.length()-1;//扩容字符串最后一个位置
        char[] ch = s.toCharArray();
        while(left>=0){
            if(ch[left] ==' '){
                ch[right] = '0';
                ch[--right]='2';
                ch[--right]='%';
            }else{
                ch[right] = ch[left];
            }
            left--;
            right--;
        }
return new String(ch);

    }
}

151. 反转字符串中的单词

反转后倒序输出,注意空格问题

class Solution {
    public String reverseWords(String s) {
        String[] a = s.trim().split(" ");
        StringBuilder re = new StringBuilder();
        for(int i=a.length-1;i>=0;i--){
            if(!(a[i].equals(""))){
                re.append(a[i]);
                if(i>0){
                    re.append(" ");
                }
            }
        }
return new String(re);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值