栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【leetcode】字符串

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【leetcode】字符串

参考:https://gitee.com/programmercarl/leetcode-master

目录
  • 344. 反转字符串
  • 541. 反转字符串 II
  • 剑指 Offer 05. 替换空格
  • 151. 翻转字符串里的单词
  • 剑指 Offer 58 - II. 左旋转字符串
  • KMP算法待看

344. 反转字符串
class Solution {
    public void reverseString(char[] s) {
        int len=s.length;
        for(int i=0;i 
541. 反转字符串 II 
class Solution {
    public String reverseStr(String s, int k) {
        int len=s.length();
        char[] arr = s.toCharArray();
        for(int i=0;i 
剑指 Offer 05. 替换空格 

双指针法:先把数组扩展到替换后的长度
两个指针,一个从原来末尾开始遍历,一个从新末尾开始遍历
遇到字符填入新末尾,遇到空格填入%20

class Solution {
    public String replaceSpace(String s) {
        StringBuilder res = new StringBuilder();
        for(int i=0; i 
151. 翻转字符串里的单词 

先把多余的空格去掉,再翻转整个字符串,再每个单词内翻转

class Solution {
    public String reverseWords(String s) {
        StringBuilder sb = trimSpaces(s);

        // 翻转字符串
        reverse(sb, 0, sb.length() - 1);

        // 翻转每个单词
        reverseEachWord(sb);

        return sb.toString();
    }

    public StringBuilder trimSpaces(String s) {
        int left = 0, right = s.length() - 1;
        // 去掉字符串开头的空白字符
        while (left <= right && s.charAt(left) == ' ') {
            ++left;
        }

        // 去掉字符串末尾的空白字符
        while (left <= right && s.charAt(right) == ' ') {
            --right;
        }

        // 将字符串间多余的空白字符去除
        StringBuilder sb = new StringBuilder();
        while (left <= right) {
            char c = s.charAt(left);

            if (c != ' ') {
                sb.append(c);
            } else if (sb.charAt(sb.length() - 1) != ' ') {
                sb.append(c);
            }

            ++left;
        }
        return sb;
    }

    public void reverse(StringBuilder sb, int left, int right) {
        while (left < right) {
            char tmp = sb.charAt(left);
            sb.setCharAt(left++, sb.charAt(right));
            sb.setCharAt(right--, tmp);
        }
    }

    public void reverseEachWord(StringBuilder sb) {
        int n = sb.length();
        int start = 0, end = 0;

        while (start < n) {
            // 循环至单词的末尾
            while (end < n && sb.charAt(end) != ' ') {
                ++end;
            }
            // 翻转单词
            reverse(sb, start, end - 1);
            // 更新start,去找下一个单词
            start = end + 1;
            ++end;
        }
    }
}
剑指 Offer 58 - II. 左旋转字符串

一共n个字符,左旋转前k个
先分别翻转前k个,后n-k个,再整体翻转

class Solution {
    public String reverseLeftWords(String s, int n) {
        char[] arr = s.toCharArray();
        int len=s.length();
        reverse(arr,0,n-1);
        reverse(arr,n,len-1);
        reverse(arr,0,len-1);
        return new String(arr);

    }

    public void reverse(char[] arr, int left, int right){
        while(left 
KMP算法待看
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/315628.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号