day7反转链表&反转链表II替换空格&反转字符串里的单词&左旋转字符串

        Java中有很多对字符串封装的操作,本次解题中不调用方法。

1.力扣344

        利用双指针即可解决反转链表,定义一个left指针指向0,right指向nums.length-1,交换后向中间移动,直至left>=right结束

解题步骤:

  • 定义两个指针,left和right,分别初始化为0和nums.length-1
  • nums【left】和nums【right】交换值,并让左右指针分别向中间移动一步
  • 重复循环,直至left>=right

代码如下:

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

2.力扣541

        本题规则比较复杂,搞清楚规则后就就可以轻松解决。

解题步骤:

  • 讲字符串转换为字符数组,并利用for循环遍历数组
  • 定义一个begin和end,分别记录待交换的区域
  • 计算交换区域,begin=i,end=Math.min(nums.length-1,i+k-1)
  • 然后交换数值

代码如下:

    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();
        for(int i=0;i

3.剑指Offer 05.替换空格

        本题利用了Java中可变字符串,使解题变得很方便;若不使用可变字符串则需要重新定义空间添加。还有一种思路是根据字符串中空格的数量,对数组进行扩容,然后把元素换位置的时候,顺便替换空格的值。

解题步骤:

  • 定义一个可变字符串(哪个都行),然后遍历字符数组
  • 若值为空格,则存%20进字符串中
  • 若不为空格,则直接存进字符串中
  • 最后可变字符串变为字符串就解决了

代码如下:

    public String replaceSpace(String s) {
        StringBuffer str = new StringBuffer();
        for(int i=0;i

4.力扣151反转字符串中的单词

        本题难度挺大,研究了好久,差不多一个多点哈哈哈;解题步骤大致分为3步,先反转整个链表,然后在反转每个单词,最后把单词收集起来并添加空格,这个题要多debug!!!

解题步骤:

  • 首先反转整个数组,reverse(arr,0,arr.length-1)
  • 接下来用for循环遍历数组,碰到空格则跳过,当遇到非空字符的时候,则用while循环遍历整个单词,便于反装整个数组
  • 进行反转后,在尾部添加一个空格
  • 最后返回反转后数组,在返回时也需要进行判断,为了防止尾部有多余空格。

代码如下:

    public String reverseWords(String s) {
        //反转整个字符串
        char[] arr = s.toCharArray();
        reverse(arr,0,arr.length-1);
        int k=0;
        int slow = 0;
        for(int i=0;i

你可能感兴趣的:(代码随想录,链表,数据结构,java)