关于字符串的算法题(一)

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"。

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

原文地址:https://www.cnblogs.com/strong-FE/p/15434603.html