首页 > 其他分享 >字符串

字符串

时间:2024-01-22 16:35:46浏览次数:34  
标签:ch charAt int needle next length 字符串

1.力扣344-反转字符串
第一个和倒数第一个交换,第二个和倒数第二个交换

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

2.力扣541-反转字符串2

class Solution {
    public String reverseStr(String s, int k) {
        char[] ch = s.toCharArray();
        for(int i = 0; i < s.length(); i += 2 * k){
            int start = i;
            int end = Math.min(s.length() - 1, start + k - 1);
            while(start < end){
                char c = ch[start];
                ch[start] = ch[end];
                ch[end] = c;
                start ++;
                end --;
            }
        }
        return new String(ch);
    }
}

3.力扣28-找出字符串中第一个匹配项的下标(KMP算法)
!!!最主要的就是找到最长相等前后缀,前缀表

class Solution {
    public int strStr(String haystack, String needle) {
        int[] next = new int[needle.length() + 1];
        for(int j = 2, i = 0; j <= needle.length(); j ++){
            while(i > 0 && needle.charAt(i) != needle.charAt(j - 1)) i = next[i];
            if(needle.charAt(i) == needle.charAt(j - 1)) i ++;
            next[j] = i;
        }
        for(int i = 0, j = 0; i < haystack.length(); i ++){
            while(j > 0 && haystack.charAt(i) != needle.charAt(j)) j = next[j];
            if(haystack.charAt(i) == needle.charAt(j)) j ++;
            if(j == needle.length()){
                return i - j + 1;
            }  
        }
        return -1;
    }
}

4.力扣459-重复的子字符串-kmp算法

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        int l = s.length();
        int[] next = new int[l + 1];
        for(int i = 0, j = 2; j <= l; j ++){
            while(i > 0 && s.charAt(i) != s.charAt(j - 1)) i = next[i];
            if(s.charAt(i) == s.charAt(j - 1)) i ++;
            next[j] = i;
        }
        if(next[l] > 0 && l % (l - next[l]) == 0) return true;
        else return false;
    }
}

标签:ch,charAt,int,needle,next,length,字符串
From: https://www.cnblogs.com/wusuoweiju/p/17978454

相关文章

  • JS 数字字符串补零
    有时为了格式美观,我们需要给数字统一格式,比如001,002,003,这就有了为数字补足0的需求。具体见代码//num:数字//fill:补足后的位数padNumber(num,fill){letlen=(''+num).length;if(fill>len){//新建一个空数组,长度为所缺位数+1,利用join(0),得......
  • leedcode 找出字符串中第一个匹配项的下标
    自己写的classSolution:defstrStr(self,haystack:str,needle:str)->int:haystack_len=len(haystack)needle_len=len(needle)ifhaystack==needle:return0ifhaystack_len<needle_len:......
  • Python 字符串不可变性的优缺点
    随着计算机技术的快速发展,越来越多的编程语言被发明出来,每种编程语言都有自己独特的特点和优势。以我经常使用python写爬虫为例,在Python中,字符串是不可变的,这意味着一旦字符串被创建,就不能被修改。这与其他一些编程语言(如C++和Java)不同,在这些语言中,字符串是可以被修改的。对于......
  • #yyds干货盘点# LeetCode程序员面试金典:反转字符串中的单词 III
    题目给定一个字符串s,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例1:输入:s="Let'stakeLeetCodecontest"输出:"s'teLekatedoCteeLtsetnoc"示例2:输入:s="MrDing"输出:"rMgniD"代码实现classSolution{publicString......
  • Go语言核心36讲 37 | strings包与字符串操作
    在上一篇文章中,我介绍了Go语言与Unicode编码规范、UTF-8编码格式的渊源及运用。Go语言不但拥有可以独立代表Unicode字符的类型rune,而且还有可以对字符串值进行Unicode字符拆分的for语句。除此之外,标准库中的unicode包及其子包还提供了很多的函数和数据类型,可以帮助我们解析各......
  • 【算法】【字符串】找出字符串中第一个匹配项的下标
    1 题目给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果 needle 不是 haystack 的一部分,则返回  -1 。示例1:输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0......
  • 【算法】【字符串】验证回文串
    1 题目如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。示例1:输入:s="Aman,a......
  • Java将字符串转为list数组
    将字符串转为list数组的实现方法概述在Java开发中,有时候我们需要将一个字符串转换为一个列表数组,以便对其中的元素进行操作和处理。本文将介绍一种常见的实现方法,并提供详细的步骤和示例代码来帮助你完成这个任务。实现步骤下面是实现将字符串转为list数组的一般步骤,你可以按照......
  • Java将json字符串转换为数组的方法
    Java将json字符串转换为数组的方法在Java开发中,经常会遇到将json字符串转换为数组的需求。JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,常用于前后端数据传输和存储。而Java中的JSONArray类可以用来处理json数组。下面将介绍一种常用的方法,用于将json字符串转换为......
  • Java获取两个字符串日期的间隔天数
    Java获取两个字符串日期的间隔天数1.概述在Java中,要计算两个字符串日期之间的间隔天数,首先需要将字符串日期转换为java.util.Date对象,然后通过对比两个Date对象的时间戳计算出间隔天数。2.实现步骤步骤描述步骤1将字符串日期转换为java.util.Date对象步骤2获取......