代码随想录-字符串

代码随想录-字符串

1.反转字符串(力扣344)
1.1 题目

在这里插入图片描述

1.2 代码
class Solution {
    public void reverseString(char[] s) {

        //定义左指针l和右指针r
        int l=0;
        int r=s.length-1;
        //临时变量
        char tem='0';
        //进行遍历交换
        while(l<=r){
            tem=s[l];
            s[l]=s[r];
            s[r]=tem;
            l++;
            r--;
        }        
    }
}
1.3 思路
1.定义两个指针,分别从左、右进行遍历并交换
2.替换空格(剑指offer05)
2.1 题目

在这里插入图片描述

2.2 代码
class Solution {
    public String replaceSpace(String s) {
        if(s==null || s.length()==1){
            return s;
        }

        //java中的方法真好用
        // return s.replaceAll(" ","%20");

        StringBuilder sb=new StringBuilder();
        for(int i=0;i<s.length();i++){
            if(String.valueOf(s.charAt(i)).equals(" ")){
                sb.append("%20");
            }else{
                sb.append(s.charAt(i));
            }
        }
        return sb.toString();
    }
}
2.3 思路
遍历替换即可
3.颠倒字符串中的单词(力扣151)
3.1 题目

在这里插入图片描述

3.2 代码
class Solution {
    public String reverseWords(String s) {

        //首先对s字符串前后的空格进行消除
        s=s.trim();
        //使用StringBuilder进行拼接
        StringBuilder sb=new StringBuilder();
        //使用空格对字符串进行切割
        String[] strs=s.split(" ");
        for(int i=strs.length-1;i>=0;i--){
            //注意:一定要加上这个
            if(strs[i].equals("")) continue;
            sb.append(strs[i].replaceAll(" ",""));
            if(i!=0){
                sb.append(" ");
            }            
        }
        return sb.toString();
    }
}
3.3 思路
要知道String中的以下方法:
1."abc".trim() 删除字符串前后的的空格
2."abc".replaceAll(" ","")  将字符串中空格替换
3."abc".split(" ")  根据空格进行字符串切割
【注意】:切割完之后,一定要判断切割后的字符串和""是否一样,一样则continue
4.替换空格(剑指offer 05)
4.1 题目

在这里插入图片描述

4.2 代码
class Solution {
    public String replaceSpace(String s) {
        if(s==null || s.length()==1){
            return s;
        }

        //java中的方法真好用
        // return s.replaceAll(" ","%20");

        StringBuilder sb=new StringBuilder();
        for(int i=0;i<s.length();i++){
            if(String.valueOf(s.charAt(i)).equals(" ")){
                sb.append("%20");
            }else{
                sb.append(s.charAt(i));
            }
        }
        return sb.toString();
    }
}
4.3 思路
使用StringBuilder就行
5.左旋转字符串(剑指offer 58 Ⅱ)
5.1 题目

在这里插入图片描述

5.2 代码
class Solution {
    public String reverseLeftWords(String s, int n) {

        //如果k与字符串长度相同,则直接返回s
        if(n==s.length()){
            return s;
        }

        StringBuilder sb=new StringBuilder();
        //对n之后的字符进行拼接
        for(int i=n%s.length();i<s.length();i++){
            sb.append(s.charAt(i));
        }
        //对n及n之前的字符进行拼接
        for(int i=0;i<n%s.length();i++){
            sb.append(s.charAt(i));
        }
        return sb.toString();

    }
}
5.3 思路
思路一:
	1.先判断n是否和字符串长度相同,相同则反转之后还是自身,直接return
	2.从n%s.length()开始,拼接到末尾(不包含n)
	3.从0开始,拼接到n
思路二:
示例:s="abcdef" n=2
	1.先将前两个字符反转:"bacdef"
	2.再将后4个字符反转:"bafedc"
	3.将字符串整体反转:"cdefab"
6.实现strStr()(力扣28)
6.1 题目

在这里插入图片描述

6.2 代码
class Solution {
    public int strStr(String haystack, String needle) {
        //needle为null或长度为0,返回0
        if(needle==null || needle.length()==0){
            return 0;
        }

        //needle的长度>haystack的长度,返回-1
        if(needle.length()>haystack.length()){
            return -1;
        }

        //指向haystack的左指针
        int l1=0;
        //指向needle的左指针
        int l2=0;
        while(l1<haystack.length() && l2<needle.length()){
            if(haystack.charAt(l1)==needle.charAt(l2)){
                l1++;
                l2++;
            }else{
                //使l1回退到之前的l1+1上
                l1=l1-l2+1;
                l2=0;
            }
            if(l2==needle.length()){
                return l1-l2;                
            }
        }
        return -1;
    }
}
6.3 思路
思路一:
	直接使用String的indexOf()方法
思路二:
	1.判断
		1.1 若needle为null或needle的长度为0,直接返回0
		1.2 若needle的长度>haystack的长度,直接返回-1
	2.设置双指针:l1、l2分别指向haystack和needle的左边
	3.判断
		3.1 l1和l2指向的字符相同的话,l1++,l2++
		3.2 l1和l2指向的字符不相同的话,l1=l1-l2+1,l2=0,
		【注意】:l1=l1-l2+1,是让l1指向在l2之前+1的位置
		3.3 当l2指针与needle长度相同时,说明已经遍历完了
	4.在while中没有return的话,就return -1	
7.重复的子字符串(力扣459)
7.1 题目

在这里插入图片描述

7.2 代码
class Solution {
    public boolean repeatedSubstringPattern(String s) {
        //当s的长度为1时,返回false
        if(s.length()==1){
            return false;
        }

        //先对s进行重复拼接
        String str=s+s;
        //若字符串满足条件,则将第一个和最后一个字串破坏掉
        if(str.substring(1,str.length()-1).contains(s)){
            return true;
        } 
        return false;
    }
}
7.3 思路
1.将s重复拼接一次,成为str
2.破坏str中第一个字串和最后一个字串
3.若破坏后的依然存在原子串s,则返回true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值