首页 > 编程语言 >( Java 和 C++ 还是有差别)卑微地向API低下了头,但是反转字符串的单词依旧写了很久 学会( 151. 反转字符串中的单词 ) 两个剑指就像小儿科

( Java 和 C++ 还是有差别)卑微地向API低下了头,但是反转字符串的单词依旧写了很久 学会( 151. 反转字符串中的单词 ) 两个剑指就像小儿科

时间:2022-12-03 21:46:29浏览次数:40  
标签:end String 反转 单词 start length 字符串 sb

344.反转字符串 - ez

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

541. 反转字符串II

1、 画图去分析,会很容易找到end的取值
2、把 i++ 变成 i+= 2*k 是一个很重要的思路进步 -

class Solution {
    public String reverseStr(String s, int k) {
        char[] str = s.toCharArray();
        for (int i = 0; i < s.length(); i += 2 * k) {
            int start = i;
            int end;
            end = i + k - 1 > s.length() - 1 ? s.length() - 1 : i + k - 1;
            // ⬆⬆⬆⬆⬆⬆   IDEA自动优化成Math.min(i + k - 1, s.length() - 1)
            char tmp;
            while (start < end) {
                tmp = str[start];
                str[start] = str[end];
                str[end] = tmp;
                start++;
                end--;
            }
        }
        return new String(str);
    }
}

151.翻转字符串里的单词

1、思路很重要 ( 先去空格 -> 反转字符串 -> 反转字符串的单词 )
2、还就内个找 end 找了很久。

/********************************/
    /**
     * <a href="https://leetcode.cn/problems/reverse-words-in-a-string/">151. 反转字符串中的单词</a><BR>
     * 给你一个字符串 s ,请你反转字符串中 单词 的顺序。<BR>
     */
    public String reverseWords(String s) {
        StringBuilder sb = new StringBuilder();
        sb = removeSpace(s);
        reverseEachWord(sb);
        reverse(sb, 0, sb.length() - 1);
        return sb.toString();

    }

    private StringBuilder removeSpace(String s) {
        StringBuilder sb = new StringBuilder();
        int start = 0, end = s.length() - 1;
        while (s.charAt(start) == ' ') start++;
        while (s.charAt(end) == ' ') end--;
        while (start <= end) {
            if (s.charAt(start) != ' ' || sb.charAt(sb.length() - 1) != ' ') {
                sb.append(s.charAt(start));
            }
            start++;
        }
        return sb;
    }

    private void reverse(StringBuilder sb, int start, int end) {
        char tmp;
        while (start < end) {
            tmp = sb.charAt(start);
            sb.setCharAt(start, sb.charAt(end));
            sb.setCharAt(end, tmp);
            start++;
            end--;
        }
    }

    private void reverseEachWord(StringBuilder sb) {
        int start = 0, end = start + 1;
        while (end < sb.length()) {
            while (end < sb.length() && sb.charAt(end) != ' ') {
                end++;
            }
            reverse(sb, start, end - 1);
            // end其实是通过start去定位的,能用函数映射关系找数字,就不要用脑袋去找
            start = end + 1;
            end = start + 1;
        }
    }

/**************************************************/

剑指Offer 05.替换空格 【经历151题的我,这个不要太ez】

【省流: ez 但是 API战士】

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

剑指Offer58-II.左旋转字符串 【那就更ez了】

【谢谢 java提供的面向对象方法
【学过c语言,感觉面向过程会复杂一点,我也不确定】

class Solution {
    public String reverseLeftWords(String s, int n) {
            return s.substring(n) + s.substring(0,n);
	}
}

标签:end,String,反转,单词,start,length,字符串,sb
From: https://www.cnblogs.com/Chain-Tian/p/16948826.html

相关文章

  • 删除排序链表中的重复元素 删除排序链表中的重复元素 II 旋转链表 字符串中第二大的
    83.删除排序链表中的重复元素if(head==null)returnnull;ListNodepre=head;while(pre.next!=null){if(pre.val==pre.next.val){pre.next=pre.next.nex......
  • 反转链表
    92.反转链表给你单链表的头指针head和两个整数left和right,其中left<=right。请你反转从位置left到位置right的链表节点,返回反转后的链表构建一个虚拟节......
  • JS数据类型转换,转数值,转字符串,转布尔
    ​1.转数值number        parseInt(‘内容‘/变量名)可以强制把字符串转整数数值,隐式转换        Parsefloat(‘内容‘/变量名)可以强制把有小数的字符串......
  • Java重点 | 字符串
    String字符串概述java.lang.String类代表字符串。API当中说:Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现。其实就是说:程序当中所有的双引号字符串,都......
  • 力扣 leetcode 438. 找到字符串中所有字母异位词
    问题描述给定两个字符串s和p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词指由相同字母重排列形成的字符串(包括相同的字......
  • 代码随想录——字符串
    反转字符串题目简单classSolution{publicvoidreverseString(char[]s){intl=0;intr=s.length-1;while(l<r){......
  • clickhouse 字符串搜索正则匹配函数
    --position:显示hello在字符串第一个出现的位置。selectposition('ckhelloworldhellospark','hellow')ASpositionSearch;--match:匹配到了则返回1,否则返回0sel......
  • golang rang 字符串
    golang遍历字符串,有多种方式:``点击查看代码 //字符串,把字符串起来 s:="中国人,zgr" forpos,char:=ranges{ //range是按照字符来遍历,返回字符出现的位置......
  • 「遍历」字符串中第二大的数字(力扣第1796题)
    本题为12月3日力扣每日一题题目来源:力扣第1796题题目tag:遍历题面题目描述给你一个混合字符串s,请你返回s中第二大的数字,如果不存在第二大的数字,请你返回-1。混合......
  • 最长上升子序列(字符串+路径追溯版)
    1#include<bits/stdc++.h>2usingnamespacestd;34#defineintlonglong56#ifdefLOCAL7#include"algo/dbg.h"8#else9#definedebug(...)4......