LeetCode刷题Day08——字符串(字符串交换)

简介: 一、反转字符串

一、反转字符串

题目链接:344. 反转字符串

/**
 * <pre>
 * 双指针指向头和尾,不断交换并向中间靠拢 
 * </pre>
 *
 * @author <a href="https://github.com/Ken-Chy129">Ken-Chy129</a>
 * @date 2023/1/9 11:06
 */
public class 反转字符串344 {
    public void reverseString(char[] s) {
        int len = s.length;
        char tmp;
        for (int i=0; i<len/2; i++) {
            tmp = s[len-i-1];
            s[len-i-1] = s[i];
            s[i] = tmp;
        }
    }
}

二、反转字符串II

题目链接:541. 反转字符串 II

/**
 * <pre>
 * 每隔k个反转k个,末尾不够k个时全部反转
 * </pre>
 *
 * @author <a href="https://github.com/Ken-Chy129">Ken-Chy129</a>
 * @date 2023/1/9 11:16
 */
public class 反转字符串II541 {
    public String reverseStr(String s, int k) {
        char[] chars = s.toCharArray();
        for (int i=0; i<s.length(); i+=2*k) {
            reserve(chars, i, Math.min(i + k, s.length()));
        }
        return new String(chars);
    }
    public void reserve(char[] chars, int begin, int end) {
        int len = end - begin;
        char tmp;
        for (int i=0; i<len/2; i++) {
            tmp = chars[end-i-1];
            chars[end-i-1] = chars[begin+i];
            chars[begin+i] = tmp;
        }
    }
}

三、替换空格

题目链接:05. 替换空格

public class 替换空格5 {
    public String replaceSpace(String s) {
        StringBuilder sb = new StringBuilder();
        for (int i=0; i<s.length(); i++) {
            if (s.charAt(i) == ' ') {
                sb.append('%');
                sb.append('2');
                sb.append('0');
            } else {
                sb.append(s.charAt(i));
            }
        }
        return sb.toString();
    }
}

四、翻转字符串里的单词

题目链接:151. 反转字符串中的单词

/**
 * <pre>
 * 1.用栈维护
 * 2.调用api
 * </pre>
 *
 * @author <a href="https://github.com/Ken-Chy129">Ken-Chy129</a>
 * @date 2023/1/9 13:57
 */
public class 反转字符串中的单词151 {
    // 用栈维护
    public String reverseWords(String s) {
        int i = 0, len = s.length();
        Stack<String> stack = new Stack<>();
        while (i<len) {
            while (i < len && s.charAt(i) == ' ') {
                i++;
            }
            if (i == len) {
                break;
            }
            StringBuilder sb = new StringBuilder();
            while (i < len && s.charAt(i) != ' ') {
                sb.append(s.charAt(i++));
            }
            stack.add(sb.toString());
        }
        StringBuilder res = new StringBuilder();
        while (stack.size() > 1) {
            res.append(stack.pop());
            res.append(' ');
        }
        res.append(stack.pop());
        return res.toString();
    }
    // 调用api
    public String reverseWords2(String s) {
        // 除去开头和末尾的空白字符
        s = s.trim();
        // 正则匹配连续的空白字符作为分隔符分割
        List<String> wordList = Arrays.asList(s.split("\\s+"));
        Collections.reverse(wordList);
        return String.join(" ", wordList);
    }
}
相关文章
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
35 1
|
2月前
|
JavaScript
力扣3333.找到初始输入字符串Ⅱ
【10月更文挑战第9天】力扣3333.找到初始输入字符串Ⅱ
34 1
|
3月前
|
数据采集 负载均衡 安全
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
本文提供了多个多线程编程问题的解决方案,包括设计有限阻塞队列、多线程网页爬虫、红绿灯路口等,每个问题都给出了至少一种实现方法,涵盖了互斥锁、条件变量、信号量等线程同步机制的使用。
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
|
2月前
|
C++
Leetcode第43题(字符串相乘)
本篇介绍了一种用C++实现的字符串表示的非负整数相乘的方法,通过逆向编号字符串,将乘法运算转化为二维数组的累加过程,最后处理进位并转换为字符串结果,解决了两个大数相乘的问题。
25 9
|
2月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
22 0
LeetCode第二十四题(两两交换链表中的节点)
|
2月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
19 0
|
2月前
【LeetCode 22】459.重复的子字符串
【LeetCode 22】459.重复的子字符串
30 0
|
2月前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
19 0
|
2月前
【LeetCode 19】541.反转字符串II
【LeetCode 19】541.反转字符串II
21 0
|
2月前
【LeetCode 18】6.2.反转字符串
【LeetCode 18】6.2.反转字符串
15 0