字符串:都是常见操作啦!你掌握了嘛?


不要纠结,干就完事了,熟练度很重要!!!多练习,多总结!!!

LeetCode344:反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
示例 1:
输入:[“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]

解题思路

之前讲过一个旋转数组的题目,思想是一样的!双指针!不要迟疑!
双指针分别初始化在字符串数组的两端,然后每次交换后再向中间移动,直至两指针相遇交换结束!

代码实现

class Solution {
    public void reverseString(char[] s) {
        int i=0,j=s.length-1;
        while (i<j){
            char tmp=s[i];
            s[i++]=s[j];
            s[j--]=tmp;
        }
    }
}

LeetCode796:旋转字符串

给定两个字符串, A 和 B。A 的旋转操作就是将 A 最左边的字符移动到最右边。例如, 若 A = ‘abcde’,在移动一次之后结果就是’bcdea’ 。如果在若干次旋转操作之后,A 能变成B,那么返回True。

示例 1:
输入: A = ‘abcde’, B = ‘cdeab’
输出: true

解题思路

按照题目意思来呗。题意是字符串A若干次旋转后看能否和B相等,那么我们就将字符串A进行若干次旋转,旋转方法等价于用substring函数进行头尾拼接(即每次把A的尾部一个字符,拼接到头部),然后每次拼接后用equals和B判断是否相等即可

代码实现

class Solution {
    public boolean rotateString(String A, String B) {
        if (A.equals("")&&B.equals("")){
            return true;
        }
        for (int i=1;i<A.length();i++){
            String tmp=A.substring(i,A.length())+A.substring(0,i);
            if (tmp.equals(B)){
                return true;
            }
        }
        return false;
    }
}

LeetCode14:最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,则返回""

示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”

解题思路

既然是公共前缀,那么数组中随便取一个元素进行匹配就行,假设就去第一个,那么我们每次都那第一个元素去和数组其余元素进行匹配(匹配方法是index of),看第一个元素是否是公共前缀,如果有不满足的那么ok,我对第一个字符进行截短(截短即每次去除尾部一个字符用substring实现),看第一个元素截短到什么长度时,可以和数组其余全部元素匹配成功!如果最后第一个元素都缩减为“”也就是空,那么就是没有公共前缀,返回“”即可!

代码实现

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs.length<1){
            return "";
        }
        String prefix=strs[0];
        for (int i=1;i<strs.length;i++){
            while (strs[i].indexOf(prefix,0)!=0){
                if (prefix.length()==0){
                    return "";
                }
                prefix=prefix.substring(0,prefix.length()-1);
            }
        }
        return prefix;
    }
}

LeetCode125:验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true

解题思路

回文串就是对称结构,正着看反着看都一样!我提到了对称结构,那么怎么判断?当然双指针了!但是需要有些预处理,一个是将字符串的大小写统一为小写字母,另外要跳过一个标点符号!之后初始化两个指针分别在字符串的两端,每次需要跳过标点符号指向字符然后判断是否相等,遇到不相等直接返回false,到两指针相遇时,可以返回true

代码实现

class Solution {
    public boolean isPalindrome(String s) {
        s=s.toLowerCase();
        char[] ch=s.toCharArray();
        int i=0,j=ch.length-1;
        while (i<j){
            if (!((ch[i]>='0'&&ch[i]<='9')||(ch[i]>='a'&&ch[i]<='z'))){
                i++;
                continue;
            }
            if (!((ch[j]>='0'&&ch[j]<='9')||(ch[j]>='a'&&ch[j]<='z'))){
                j--;
                continue;
            }
            if (ch[i]!=ch[j]){
                return false;
            }
            i++;
            j--;
        }
        return true;
    }
}

剑指offer17:打印从1到最大的n位数

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

解题思路

n位的最大数字可以借助pow函数来得出,但是如果禁止使用呢?我们用一个for循环一样可以得出,即l=10*l+9,就是9,99,999…,是不是很简单!然后求出最大数字了,数组大小也就确定了,直接for循环对数组赋值就行!

代码实现

class Solution {
    public int[] printNumbers(int n) {
        int l=0;
        for (int i=1;i<=n;i++){
            l=l*10+9;
        }
        int[] res=new int[l];
        for (int j=1;j<=l;j++){
            res[j-1]=j;
        }
        return res;
    }
}

LeetCode58:最后一个单词的长度

给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。

解题思路

最后一个!那么我们可以将字符串进行倒序遍历,来统计最后一个单词的长度。这里有一个坑!那就是最后一个字符可能为“ ”,那么我们需要跳过最后一个空格再开始计数

代码实现

class Solution {
    public int lengthOfLastWord(String s) {
        if (s==null||s.length()==0){
            return 0;
        }
        int count=0;
        for (int i=s.length()-1;i>=0;i--){
            if (s.charAt(i)==' '){
                if (count==0){
                    continue;
                }
                break;
            }
            count++;
        }
        return count;
    }
}

总结

本题来源于Leetcode中 归属于字符串类型题目。
同许多在算法道路上不断前行的人一样,不断练习,修炼自己!
如有博客中存在的疑问或者建议,可以在下方留言一起交流,感谢各位!

觉得本博客有用的客官,可以给个点赞+收藏哦! 嘿嘿

喜欢本系列博客的可以关注下,以后除了会继续更新面试手撕代码文章外,还会出其他系列的文章!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Python 中,字符串是一种常见的数据类型,用于表示和处理文本数据。字符串是由一系列字符组成的,可以包含字母、数字、符号等。 Python 中的字符串可以使用单引号(')或双引号(")括起来,例如: ``` my_string = "Hello, world!" ``` 另外,Python 还支持三重引号('''或""")来定义多行字符串,例如: ``` my_string = ''' This is a multi-line string. It can contain multiple lines of text. ''' ``` 可以使用加号(+)运算符来连接两个字符串,例如: ``` greeting = "Hello" name = "Alice" message = greeting + ", " + name + "!" print(message) ``` 输出结果为: ``` Hello, Alice! ``` Python 中的字符串还支持一些常用的方法,例如: - `len()`:返回字符串的长度。 - `strip()`:去除字符串两侧的空格。 - `lower()`:将字符串中的所有字母转换为小写。 - `upper()`:将字符串中的所有字母转换为大写。 - `replace()`:替换字符串中的指定子串。 - `split()`:将字符串按照指定分隔符切分成多个子串,并返回一个列表。 例如: ``` my_string = " Hello, world! " print(len(my_string)) # 输出 15 print(my_string.strip()) # 输出 "Hello, world!" print(my_string.lower()) # 输出 " hello, world! " print(my_string.upper()) # 输出 " HELLO, WORLD! " print(my_string.replace("world", "Python")) # 输出 " Hello, Python! " print(my_string.split(",")) # 输出 [" Hello", " world! "] ``` 这些是 Python 中字符串的基本用法和方法。掌握它们后,您就可以方便地处理和操作字符串

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值