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


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

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

  • 相关阅读:
    数据结构:图 (总结)
    排序算法总结(此篇文章是14年写作,代码难看,请看我新发表的排序总结)
    no identifier specified for entity错误
    哈夫曼编码算法思想总结
    线索二叉树
    ORACLE 错误 ora-01830 解决方法
    (转)web会话管理方式
    (转)C3P0配置
    分页技术()
    简易 DBUtil 封装
  • 原文地址:https://www.cnblogs.com/strong-FE/p/15434603.html
Copyright © 2020-2023  润新知