242.有效地字母异位词

由于本题的字符串只包含 26 个小写字符,因此可以使用长度为 26 的整型数组对字符串出现的字符进行统计,并对比字母出现的次数是否一致。不再使用 HashMap。

toCharArray()的用法

java中的foreach的用法

  1. class Solution {
  2. public boolean isAnagram(String s, String t) {
  3. int[] cnts = new int[26];
  4. for (char c : s.toCharArray()) {
  5. cnts[c - 'a']++;
  6. }
  7. for (char c : t.toCharArray()) {
  8. cnts[c - 'a']--;
  9. }
  10. for (int cnt : cnts) {
  11. if (cnt != 0) {
  12. return false;
  13. }
  14. }
  15. return true;
  16. }
  17. }

进阶,由于整个Uniocde的字符范围较大,可以使用哈希表映射而不是固定大小的计数器。

409.最长回文串

使用长度为 256 的整型数组来统计每个字符出现的个数,每个字符有偶数个可以用来构成回文字符串。

因为回文字符串最中间的那个字符可以单独出现,所以如果有单独的字符就把它放到最中间。

  1. public int longestPalindrome(String s) {
    //使用ASCII表示大小写英文字母只要到128就够用了。
  2. int[] cnts = new int[128];
  3. for (char c : s.toCharArray()) {
  4. cnts[c]++;
  5. }
  6. int palindrome = 0;
  7. for (int cnt : cnts) {
  8. palindrome += (cnt / 2) * 2;
  9. }
  10. if (palindrome < s.length()) {
  11. palindrome++; // 这个条件下 s 中一定有单个未使用的字符存在,可以把这个字符放到回文的最中间
  12. }
  13. return palindrome;
  14. }

更新:在一个回文字符串中,最多只能有一个出现一次的字母(aaa可以理解为有一个出现了一次的a),只需要统计有多少个字母只出现了一次,用字符串的长度减去出现一次的字母数再加一,就是最长字符串的长度。两种方法本质上都是将只出现一次的字母去除,运行结果基本上也没有差异。但是第二种更方便理解。

  1. class Solution {
  2. public int longestPalindrome(String s) {
  3. int[] arr = new int[128];
  4. for(char c : s.toCharArray()) {
  5. arr[c]++;
  6. }
  7. int count = 0;
  8. for (int i : arr) {
  9. count += (i % 2);
  10. }
  11. return count == 0 ? s.length() : (s.length() - count + 1);
  12. }
  13. }

205.同构字符串

记录一个字符上次出现的位置,如果两个字符串中的字符上次出现的位置一样,那么就属于同构。

  1. class Solution {
  2. public boolean isIsomorphic(String s, String t) {
  3. int[] preIndexOfS = new int[256];
  4. int[] preIndexOfT = new int[256];
  5. for (int i = 0; i < s.length(); i++) {
  6. char sc = s.charAt(i), tc = t.charAt(i);
  7. if (preIndexOfS[sc] != preIndexOfT[tc]) {
  8. return false;
  9. }
  10. preIndexOfS[sc] = i + 1;
  11. preIndexOfT[tc] = i + 1;
  12. }
  13. return true;
  14. }
  15. }

647.回文子串

  1. 从字符串的某一位开始,尝试着去扩展子字符串。
  1. private int cnt = 0;
  2.  
  3. public int countSubstrings(String s) {
  4. for (int i = 0; i < s.length(); i++) {
  5. extendSubstrings(s, i, i); // 奇数长度
  6. extendSubstrings(s, i, i + 1); // 偶数长度
  7. }
  8. return cnt;
  9. }
  10.  
  11. private void extendSubstrings(String s, int start, int end) {
  12. while (start >= 0 && end < s.length() && s.charAt(start) == s.charAt(end)) {
  13. start--;
  14. end++;
  15. cnt++;
  16. }
  17. }

9.回文数

  1. class Solution {
  2. public boolean isPalindrome(int x) {
  3. if (x == 0) {
  4. return true;
  5. }
  6. if (x < 0 || x % 10 == 0) {
  7. return false;
  8. }
  9. int right = 0;
  10. while (x > right) {
  11. right = right * 10 + x % 10;
  12. x /= 10;
  13. }
  14. return x == right || x == right / 10;
  15. }
  16. }

696.计数二进制子串

  1. class Solution {
  2. public int countBinarySubstrings(String s) {
  3. int preLen = 0, curLen = 1, count = 0;
  4. for (int i = 1; i < s.length(); i++) {
  5. if (s.charAt(i) == s.charAt(i - 1)) {
  6. curLen++;
  7. } else {
  8. preLen = curLen;
  9. curLen = 1;
  10. }
  11.  
  12. if (preLen >= curLen) {
  13. count++;
  14. }
  15. }
  16. return count;
  17. }
  18. }
  1.  

leetcode刷题记录——字符串的更多相关文章

  1. Leetcode刷题记录(python3)

    Leetcode刷题记录(python3) 顺序刷题 1~5 ---1.两数之和 ---2.两数相加 ---3. 无重复字符的最长子串 ---4.寻找两个有序数组的中位数 ---5.最长回文子串 6- ...

  2. leetcode刷题记录--js

    leetcode刷题记录 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但 ...

  3. LeetCode刷题记录(python3)

    由于之前对算法题接触不多,因此暂时只做easy和medium难度的题. 看完了<算法(第四版)>后重新开始刷LeetCode了,这次决定按topic来刷题,有一个大致的方向.有些题不止包含 ...

  4. leetcode 刷题记录(java)-持续更新

    最新更新时间 11:22:29 8. String to Integer (atoi) public static int myAtoi(String str) { // 1字符串非空判断 " ...

  5. LeetCode 刷题记录(二)

    写在前面:因为要准备面试,开始了在[LeetCode]上刷题的历程.LeetCode上一共有大约150道题目,本文记录我在<http://oj.leetcode.com>上AC的所有题目, ...

  6. LeetCode 刷题记录

    写在前面:因为要准备面试,开始了在[LeetCode]上刷题的历程.LeetCode上一共有大约150道题目,本文记录我在<http://oj.leetcode.com>上AC的所有题目, ...

  7. LeetCode刷题总结-字符串篇

    本文梳理对LeetCode上有关字符串习题的知识点,并给出对应的刷题建议.本文建议刷题的总数为32题.具体知识点如下图: 1.回文问题 题号:5. 最长回文子串,难度中等 题号:214. 最短回文串, ...

  8. 算法进阶之Leetcode刷题记录

    目录 引言 题目 1.两数之和 题目 解题笔记 7.反转整数 题目 解题笔记 9.回文数 题目 解题笔记 13.罗马数字转整数 题目 解题笔记 14.最长公共前缀 题目 解题笔记 20.有效的括号 题 ...

  9. leetcode刷题记录——树

    递归 104.二叉树的最大深度 /** * Definition for a binary tree node. * public class TreeNode { * int val; * Tree ...

随机推荐

  1. P1852 跳跳棋 [LCA思想+二分答案]

    题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有\(3\)颗棋子,分别在\(a,b,c\)这三个位置.我们要通过最少的跳动 ...

  2. Dom运用1

    1.简单计算器 <!-- 第一个数--> <input type="text"> <!-- 符号复选框--> <select name=& ...

  3. Javascript 组成:ECMAscript、Dom、Bom

    一.核心(ECMAScript) ECMAScript 定义的只是这门语言的基础,而在此基础之上可以构建更完善的脚本语言. 二.浏览器对象模型(BOM)——对应window对象 window:窗口 w ...

  4. BuuCTF Web Writeup

    WarmUp index.php <html lang="en"> <head> <meta charset="UTF-8"> ...

  5. 9-Pandas之数据合并与轴向连接(pd.concat()的详解)

    数据合并:由于数据可能是不同的格式,且来自不同的数据源,为了方便之后的处理与加工,需要将不同的数据转换成一个DataFrame. Numpy中的concatenate().vstack().hstac ...

  6. PHP is_readable() 函数

    定义和用法 is_readable() 函数检查指定的文件是否可读. 如果文件可读,该函数返回 TRUE. 语法 is_readable(file) 参数 描述 file 必需.规定要检查的文件. 提 ...

  7. PDOStatement::fetchColumn

    PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列.(PHP 5 >= 5.1.0, PECL pdo >= 0.9.0)高佣联盟 www.cgewa ...

  8. 铁大树洞APP视频讲解和原型演示

    首先放上我们团队视频讲解演示的视频:https://v.youku.com/v_show/id_XNDYyMzA3MTgzNg==.html 团队名称:超能陆战队 团队成员:刘梦鑫(队长) 段行行 徐 ...

  9. 使用webgl(three.js)创建科技版3D机房,3D机房微模块详细介绍(升级版三)—— 1

    上节课已经详细描述了微模块机房的实现过程,文章地址(https://www.cnblogs.com/yeyunfei/p/10484241.html) 紧接着上节课的内容 我们这节可来详细讲解科技版机 ...

  10. BN系列-未完待续

    BN.LN.IN.GN Cross-Iteration Batch Normalization 因为有时候我们的计算能力有限,所以BN设置的比较小,这样BN效果就比较差. 因此我们将最近几次的batc ...