数组与字符串相关的算法

博主分享了《程序员面试金典》中的字符串与数组算法题目,包括:检查字符串中字符是否全不同、字符串翻转、判断字符串是否可通过字符重排互换、空格替换为"%20"、字符串压缩、无额外空间条件下旋转矩阵、置零矩阵元素及其行与列,以及判断字符串是否为旋转子串。所有算法均来源于原著,旨在方便复习与分享。
摘要由CSDN通过智能技术生成

最近在看 《程序员面试金典》,感觉书中的一些算法非常的精妙,所以本人对书中的每一个题目都着手实现了一遍,为了以后能够方便的重温这个知识,也为了能够将这个算法分享给 没看过这本书的小伙伴,于是本人决定将这些题目和算法写下来,当然我也只是写下题目和解法,不会对解法进行分析,想看具体分析可以买一本纸质书看一下,非常不错的一本书。

1.1 实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构,又该如何处理?

public class UniqueCharCheck {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        String data = input.nextLine();

        boolean result = isUniqueChar(data);
        System.out.println(result);
        input.close();
    }

    private static boolean isUniqueChar(String data) {
        if (data.length() > 256) // 假设字符是 ASCII 字符
            return false;
        boolean[] check = new boolean[256];

        for (int i = 0; i < data.length(); i++) {
            int v = data.charAt(i);
            if (check[v])
                return false;
            check[v] = true;
        }
        return true;
    }

}

1.2 用 C/C++ 实现 void reverse(char* str) 函数,即翻转一个 null 结尾的字符串。

#include<iostream>
using namespace std;

void reverse(char *str);
int main()
{
    char s[100];
    cin>>s;

    reverse(s);

    cout<<s<<endl;
    return 0;
}

void reverse(char *str)
{
    char *end = str;
    char *start = str;
    while(*end) 
        ++end;
    --end;
    while(start < end)
    {
        char temp = *start;
        *start++ = *end;
        *end-- = temp;
    }

    return;
}

1.3 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。

public class EqualCheck {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        String v = input.nextLine();
        String t = input.nextLi
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值