关于字符串的算法题

String 方法:

1、char charAt(int index

charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1

 

2、boolean equals(Object anObject)

String 类中重写了 equals() 方法用于比较两个字符串的内容是否相等

 

3、int indexOf(String str)

 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

 

4、int lastIndexOf(String str):

返回指定子字符串在此字符串中最右边出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

 

5、int length()

返回字符串长度

6、String replace(char searchChar, char newChar)

通过用 newChar 字符替换字符串中出现的所有 searchChar 字符,并返回替换后的新字符串。

 

7、String[] split(String regex)

根据匹配给定的正则表达式来拆分字符串。

注:. 、 $、 | 和 * 等转义字符,必须得加 \\

 

8、boolean startsWith(String prefix)

检测字符串是否以指定的前缀开始

 

9、String substring(int beginIndex)

返回字符串的子字符串,beginIndex -- 起始索引, 索引从 0 开始

 

10、char[] toCharArray()

将字符串转换为字符数组

 

11、boolean contains(String str)

判断字符串中是否包含指定的字符或字符串

 

12、boolean isEmpty()

用于判断字符串是否为空

 

相关算法题:

1、shift挪动

一次shift操作就是把一个单词的第一个挪到最后,单词有n位就最多挪n次,问可以和原单词相同几次。
如输入:byebye 输出:2
输入:abcd 输出:1

 

public class Test3 extends Thread implements Runnable {

    public static void main(String args[]) {
        int count = shiftCount("byebye");
        System.out.println(count);
    }

    public static int shiftCount(String str) {
        int aLength = str.length();
        if (aLength == 0) {
            return 0;
        }
        int count = 0;
        String cur = "";
        for (int i = 1; i <= aLength; i++) {
            cur = str.substring(i) + str.substring(0,i);
            if (cur.equals(str)) {
                count++;
            }
            System.out.println(cur);
        }
        return count;
    }
}

解析:

  1、判断字符串为空的情况

  2、创建一个字符串用于比对

  3、使用substring方法截取字符串,判断字符串相同

 

2、回文排列

给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。

回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。

回文串不一定是字典当中的单词。

示例:

输入:"tactcoa"
输出:true(排列有"tacocat"、"atcocta",等等)

 

class Solution {
     public boolean canPermutePalindrome(String s) {
        Set<Character> set = new HashSet<>();
        for (char ch : s.toCharArray()) {
            //set的add方法如果返回false,表示已经有了,
            //我们就把他删除
            if (!set.add(ch)) {
                set.remove(ch);
            }
        }
        //最后判断set的长度是否小于等于1,如果等于1说明
        //只有一个字符的个数是奇数,其他的都是偶数。如果
        //等于0说明每个字符都是偶数,否则不可能构成回文字符串
        return set.size() <= 1;
    }
}

 

解析:

回文字符串有两种,一种是奇数的,类似于"abbba",一种是偶数的,类似于"abba"或者"aabbaa"。

偶数的我们好判断,只需要找出每个字符都是偶数就行了。但奇数的就不能使用这种方式了,其实仔细观察我们就能发现,如果是奇数的,那么字符串的所有字符中只有一个字符的个数是奇数,其他的都是偶数

 

3、重复的子字符串

给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。

 

示例 1:

输入: "abab"

输出: True

解释: 可由子字符串 "ab" 重复两次构成。


示例 2:

输入: "aba"

输出: False


示例 3:

输入: "abcabcabcabc"

输出: True

解释: 可由子字符串 "abc" 重复四次构成。 (或者子字符串 "abcabc" 重复两次构成。)

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        int n = s.length();
        for (int i = 1; i * 2 <= n; ++i) {
            if (n % i == 0) {
                boolean match = true;
                for (int j = i; j < n; ++j) {
                    if (s.charAt(j) != s.charAt(j - i)) {
                        match = false;
                        break;
                    }
                }
                if (match) {
                    return true;
                }
            }
        }
        return false;
    }
}

解析:

 

posted @ 2021-10-22 10:27  jet-software  阅读(166)  评论(0编辑  收藏  举报