算法_每日一题(9.7)

简介: 算法_每日一题(9.7)

1. leetcode344. 反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。


这道题很简单,双指针格式练手,为下一题做铺垫

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


官方答案:

双指针:一前一后。如果nums[i]为0,则会i,j表示的数会交换

class Solution {
    public void moveZeroes(int[] nums) {
       int j=0;
       if(nums == null){
           return;
       }
       for(int i = 0;i<nums.length;i++){
           if(nums[i] !=0){
               int temp = nums[i];
               nums[i] = nums[j];
               nums[j++] = temp; 
           }
       }
}
}


2. leetcode557. 反转字符串中的单词 III ★

给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1

输入:s = “Let’s take LeetCode contest” 输出:“s’teL ekat edoCteeL tsetnoc”

示例 2:

输入: s = “God Ding” 输出:“doG gniD”

提示:

1 <= s.length <= 5 * 104 s 包含可打印的 ASCII 字符。 s 不包含任何开头或结尾空格。 s 里 至少

有一个词。 s 中的所有单词都用一个空格隔开。


这个题是在上个题基础上增添更多的实现,这里的话我借鉴了上一个题,还是使用双指针反转

split()方法:分隔字符串
split(" “) 仅分隔一个空格

split(”\t") 分隔空格
split(“\s”) 正则表达式:表示匹配惹你有空白字符,+表示匹配一次或多次
split(“\s+”) 分隔一个或者多个空格

下面是我自己的做法,耗费的时间空间都很大

class Solution {
    public String reverseWords(String s) {
        StringBuffer b = new StringBuffer(s);
        String c = b.reverse().toString();
        String a[] = c.split(" ");
        reverse(a);
        String m ="";
        for(int i = 0;i<a.length;i++){
            if(i==a.length-1){
                m+=a[i];
            }else{
                m+=a[i]+" ";
            }
        }
        return m;
    }
    public void reverse(String [] a){
        int left =0,right =a.length-1;
        while(left<right){
            String d = a[left];
            a[left]= a[right];
            a[right] = d;
            left++;
            right--;
        }
  }
}


官方的解答:

通过i的位置变化,来记下空格的位置,然后再倒着存瑞StringBuffer中,以此类推

class Solution {
public string reverseWords(string s) {
        string ret;
        int length = s.length();
        int i = 0; 
        while (i < length) {
            int start = i;
            while (i < length && s[i] != ' ') {
                i++;
            }
            for (int p = start; p < i; p++) {
                ret.push_back(s[start + i - 1 - p]);
            }
            while (i < length && s[i] == ' ') {
                i++;
                ret.push_back(' ');
            }
        }
        return ret;
    }
};


相关文章
|
7月前
|
算法 前端开发
每天一算法,脑子不生锈(真押韵)
每天一算法,脑子不生锈(真押韵)
|
存储 算法 搜索推荐
1【百度之星】基础算法讲解—穷举、贪心(上)
1【百度之星】基础算法讲解—穷举、贪心(上)
|
存储 算法
1【百度之星】基础算法讲解—穷举、贪心(下)
1【百度之星】基础算法讲解—穷举、贪心(下)
算法_每日一题(9.15)
算法_每日一题(9.15)
算法_每日一题(9.13)
算法_每日一题(9.13)
算法_每日一题(9.9)
算法_每日一题(9.9)
算法_每日一题(9.12)
算法_每日一题(9.12)
|
算法 测试技术 API
算法_每日一题(9.4)
算法_每日一题(9.4)
算法_每日一题(9.6)
算法_每日一题(9.6)
算法_每日一题(9.8)
算法_每日一题(9.8)