【数据结构与算法】字符串经典题

2021-01-03 07:32

阅读:454

标签:pre   ble   标准   toc   else   problems   ISE   http   移位   

  • 1. 翻转移位相关方法
  • 2. 有效的字母异位词

翻转移位相关方法

右移

s = "abcd123" k = 3
Return "123abcd"

先分别将“abcd”和“123”翻转,再将整个字符串翻转,即可得到结果。

单词翻转

s = "I am a student"
Return "student a am I"

先分别将每个单词翻转,最后将整个句子进行翻转即得到结果

有效的字母异位词

LeetCode:有效的字母异位词

题目描述:

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例:

输入: s = "anagram", t = "nagaram"
输出: true

思想:

1.使用26位计数器
因为本题仅限于小写英文字母,所以使用26位数组来进行标记即可
2.map.getOrDefault(ch, 0)
若不存在则返回0。使用这个函数可稍微优化代码,不会太臃肿。
3.遍历String的优化写法

//方法一
for(int i=0;i

方法二比方法一性能好不少

代码:

我自己的蠢方法,使用hashmap但是特别不优雅

class Solution {
    public boolean isAnagram(String s, String t) {
        HashMap map = new HashMap();
        Integer v;
        for(int i=0;i

更加优化的hashmap写法:

public boolean isAnagram_2(String s, String t) {
    Map map = new HashMap();
    for (char ch : s.toCharArray()) {
        map.put(ch, map.getOrDefault(ch, 0) + 1);
    }
    for (char ch : t.toCharArray()) {
        Integer count = map.get(ch);
        if (count == null) {
            return false;
        } else if (count > 1) {
            map.put(ch, count - 1);
        } else {
            map.remove(ch);
        }
    }
    return map.isEmpty();
}

本题的标准做法:

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] arr = new int[26];
        for(char c:s.toCharArray()){
            arr[c-‘a‘] +=1;
        }
        for(char c:t.toCharArray()){
            arr[c-‘a‘] -=1;
        }
        for(int item : arr){
            if(item!=0) return false;
        }
        return true;
    }
}

【数据结构与算法】字符串经典题

标签:pre   ble   标准   toc   else   problems   ISE   http   移位   

原文地址:https://www.cnblogs.com/buptleida/p/12991090.html


评论


亲,登录后才可以留言!