力扣字符串专题:第三天了,坚持下去,嘎嘎嘎

力扣字符串专题:第三天了,坚持下去,嘎嘎嘎,第1张

力扣字符串专题:第三天了,坚持下去,嘎嘎嘎
	今天从醒来打开电脑就开始帮别人处理数据了,你敢信?每个人的数据都得有一个专属的配套处理方式,哎呀,尽管是东拼西凑出来的代码,那也得会拼凑啊,这就好比是一个人,每个人都有自己适合的穿衣风格,专属发型,呵呵呵,闲话不说,直接进入正题。
	今日第一题就碰壁了,理解起来不复杂,需要对一些方法有所了解。
题目如下:力扣151题 解题思路:

第一步===》去除所有空格(包括字符串前、后以及中间)
第二步===》反转整个字符串(前后对应对调)
第三步===》反转每个单词(从左往右遍历,以空格为单词区分,进行翻转)

代码如下:
class Solution {
    public String reverseWords(String s) {
        StringBuilder sb = removeSpace(s);
        reverse(sb, 0, sb.length()-1);
        reverseEachWord(sb);
        return sb.toString();

        //反转每个单词
        public void reverseEachWord(StringBuilder sb) {
            int begin = 0, end = 0;
            while(begin < sb.length()) {
                while(end < sb.length() && sb.charAt(end) != ' ') {
                    end++;
                }
                reverse(sb, begin, end - 1);
                begin = end + 1;
                end++;
            }
        }
        //反转字符串
        public void reverse(StringBuilder sb, int left, int right) {
            while(left < right) {
                char temp = sb.charAt(left);
                sb.setCharAt(left, sb.charAt(right));
                sb.setCharAt(right, temp);
                left++;
                right--;
            }
        }
        //清空空格
        public StringBuilder removeSpace(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.charAt(sb.length() - 1) != ' ') {
                    sb.append(c);
                }
                left++;
            }
            return sb;
        }

    }
}

public void setCharAt(int pos, char c);
参数:

int pos – represents the position where we want to set the given character.

int pos –表示我们要设置给定字符的位置。

char c – represents the new character which we want to place.

char c –表示我们要放置的新字符。 

不得不说,只要有一个单词打错,你真的是找不到啊!我这个题就因为reverse(sb, 0, sb.length()-1);中的sb写成s,他错误还在reverse函数本身,哈哈哈,真是鸡肋呀!

再来一题:力扣165题 解题思路:

首先,以 点 为分隔符,取出来转成数字,比较大小,最后返回相应的数字即可。

代码如下:
class Solution {
    public int compareVersion(String version1, String version2) {
        int i = 0, j = 0;
        //version1,version2 只要有一个没遍历完就接着遍历
        while(i < version1.length() || j < version2.length()) {
            int x = 0, y = 0;
            //对于version1来说,以'.'为分隔,依次取出字符串
            while(i < version1.length() && version1.charAt(i) != '.') {
                //字符串 转 数字 比大小
                x = x*10 + version1.charAt(i) - '0';  
                i++;
            }
            while(j < version2.length() && version2.charAt(j) != '.') {
                y = y*10 + version2.charAt(j) - '0';
                j++;
            }
            //比完之后返回相应的数
            if(x > y) {
                return 1;
            } else if(x < y) {
                return -1;
            }
            i++;
            j++;
        }
        return 0;
    }
}

参考文献:
Java StringBuilder setCharAt()方法与示例

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5719497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存