【算法 day07】LeetCode 344.反转字符串 | 541. 反转字符串II | 卡码网:54.替换数字

发布于:2025-06-20 ⋅ 阅读:(14) ⋅ 点赞:(0)

 344.反转字符串

题目链接 | 文档讲解 |视频讲解 : 链接

 1.思路:
  • 采用双指针,left从0开始移动,right从尾元素进行移动

  • 循环判断条件:left< right,边界值使用举例法,eg: [ h ,e ,l,o ]偶数个不会相遇, [h ,e ,l ,l ,o ]奇数个,指向同一个,交换无意义

  • 交换左右节点的值

 2.代码:
public  void reverseString(char[] s) {
        int left =0;
        int right=s.length-1;
        while (left<right){
            char temp=s[left];
            s[left]=s[right];
            s[right]=temp;
            left++;
            right--;
        }
    }

541. 反转字符串II

题目链接 | 文档讲解 |视频讲解:链接

 1.思路:
  • 双指针 字符串先转成char数组

  • 首先是每计数到2k,就要反转操作,那么我们可以让for循环每次都i+2*k,直到i>length

  • start=i,end的取值,取得是Math.min(charArray.length-1,start+k-1),当剩余字符<k时,反转[start,charArray.length-1] 当剩余元素>=k时,反转的是[start,start+k-1]

误区"a b c d e" k=3  

    一开始我认为i=0,进入循环,反转了abc,剩余元素时de,剩余元素<k,需要反转,但是现在逻辑是没有进行反转。

    误区:剩余元素时相对于当前元素往后计算[start+1,length-1],而不是反转后剩余的元素。对于当前字符串i=0,剩余元素的个数是5, k<5<2*k,所以反转的是前k,即反转abc,de是不反转的。

   剩余元素时相当于当前的起始元素来说

  当需要固定规律一段一段去处理字符串的时候,要想想在for循环的表达式上做做文章

 2.代码:
 public String reverseStr(String s, int k) {
        char[] charArray = s.toCharArray();
        //1.每计数到2k时,反转前k,所以i每次变化是i+2*k
        for (int i = 0; i < charArray.length; i+=2*k) {
            //2.首元素取值为i
            int start=i;
            //3/尾元素取值
            //当剩余元素(从start元素开始往后算)>=k,反转[start,start+k-1]
            //当剩余元素<k,反转[start,charArray.length-1]
            int end=Math.min(charArray.length-1,start+k-1);
            //4.反转[start.end]字符串
            while (start < end) {
               char temp=charArray[start];
               charArray[start]=charArray[end];
               charArray[end]=temp;
               start++;
               end--;
            }
        }
        return new String(charArray);
    }

卡码网:54.替换数字

题目链接 | 文档讲解 |视频讲解:

1.思路:
  •      字符串转成char数组,遍历char数组,使用StringBuilder str

  •      判断当前元素是否是数字,是数字,str拼接number,否则拼接原始字符

  •      StringBuilder str转成字符串

 2.代码:
 public    String replace(String s){
        char[] charArray = s.toCharArray();
        StringBuilder str=new StringBuilder();
        for (char c : charArray) {
            //判断字符是否是数组
            if(Character.isDigit(c)){
                str.append("number");
            }else{
                str.append(c);
            }

//            if(c>='0' && c<='9'){
//                str.append("number");
//            }else{
//                str.append(c);
//            }

//             if(String.valueOf(c).matches("\\d")){
//                 str.append("number");
//            }else{
//                str.append(c);
//            }
        }
        return  new String(str);
    }

学会如何判断字符是否是数字: 1.Character.isDigit(ch)  2.正则  ch>='0'&& ch<='9'

3.正则表达式 String.valueOf(ch).matches("\\d")


网站公告

今日签到

点亮在社区的每一天
去签到